一周隨筆--15.9.21,隨筆--15.9.21

來源:互聯網
上載者:User

一周隨筆--15.9.21,隨筆--15.9.21
一周新知識點記錄(15.9.21)一. writeToFileatomically

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

第二個參數的意思是:

如果為YES則保證檔案的寫入原子性,就是說會先建立一個臨時檔案,直到檔案內容寫入成功再匯入到目標檔案裡.

如果為NO,則直接寫入目標檔案裡.

  二.   NSerror

參數依次為:

1、錯誤域(NSString)

2、錯誤標識 (NSInteger)

3、錯誤資訊 (字典)

NSError *error = [NSError errorWithDomain:@"錯誤域" code:400 userInfo:@{NSLocalizedDescriptionKey:@"錯誤資訊"}];

    NSLog(@"%@",error.localizedDescription);

    NSLog(@"%@",error.description);

注意:error.description並不是錯誤資訊,NSError沒有description這個屬性來描述錯誤資訊,這是對error對象的描述

參考

  三. ios7 self.view.frame

ios7.0以後如果導覽列translucent為YES,即半透明,那麼self.view的始終是以螢幕左上方為座標(0,0)點的。

如果導覽列translucent為NO,即不透明。那麼self.view在載入完畢之後,即視圖控制器的viewDidLoad方法之後(注意是之後,不包括viewDidLoad),它的地區不包括導覽列部分,即以導覽列左下角點為座標(0,0)點,高度也是螢幕高度減去了導覽列高度和狀態列高度。

特別注意在self.view載入未載入完畢,即self.view顯示之前(viewWillAppear之前),它還是以螢幕左上方為座標(0,0)點的。

  四. 關於在非同步函數中執行主隊列中的任務

    dispatch_async(dispatch_get_main_queue(), ^{

        [self initBaseView];

    });

程式碼範例如上

在主隊列中新增工作,並通過非同步函數執行。因為主隊列中的任務只能在主線程中執行,因此不開闢新的線程,那麼該任務在主線程中是串列執行的。這樣的話上面代碼直接替換成 [self initBaseView];有什麼區別呢?

區別在於:加入viewDidLoad:方法裡有3段代碼,按順序從上到下依次為A B C。其中B為[self initBaseView];

運行之後,發現3段代碼的運行順序為A,B,C,沒有任何問題。但是如果將B替換成在用非同步函數從主隊列中執行,那麼執行的順序將會是A,C,B。

因為上面的代碼是在主隊列中加入了待執行的程式碼片段B(任務B),非同步函數會等待主線程中在任務B之前的任務(也就是任務B所在的viewDidLoad:函數)執行完畢才會將任務B從主隊列中取出,放在主線程中執行。這就是為什麼先執行A,C。再執行B的原因。因此,viewDidLoad方法執行完畢,才會去執行B。

 五. 關於圖形上下文建立方法的參數Scale

關於建立圖形內容相關的兩個方法

方法一:UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

方法二:UIGraphicsBeginImageContext(CGSize size);

 

方法一中3個參數依次表示:

size:建立的圖形內容相關的尺寸大小

opaque:圖形上下文是否透明 NO為不透明

scale:映像縮放比例(用於調整映像解析度)。

 

在理解之前首先要知道的是,對於手機螢幕而言,我們用解析度在衡量螢幕的清晰度。解析度的單位是像素,以iphone6為例,解析度為750*1336像素。而我們所說的螢幕的尺寸,對於iphone6而言則是375*668,單位是點。因此iphone6螢幕一個點包含4個像素(2*2)。這個2就對應螢幕的scale屬性,可以通過[UIScreen mainScreen].scale來擷取。

 理解了上面內容,方法中的scale就不難理解了。這個scale是擷取到的映像的縮放比例(或者說是縮放因子),它決定了擷取到的映像的解析度。簡單理解,假如scale的值為2,那麼擷取到的映像一個點有4個像素(長寬各2個)。通常我們把scale的值設定成0,表示設定成預設的縮放比例(跟螢幕相同),對於配備了兩倍retain屏的iphone4s、5、5s、6,這個縮放比例預設就是2;如果是6p,則預設是3,因此scale設定成0或設定成2對於iphone4s、5、5s、6是一樣的。

 對於方法二而言,並沒有scale這個參數,其實它的預設值為1,並不是0。因此用這個方法建立圖形上下文得到的映像品質會比較低(除非iphone4)。映像的品質從映像的大小就能區別出來,將擷取到的映像儲存到沙箱,查看映像大小,輕鬆辨別。

 六.  ios7.0截屏新方法

- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates

該方法對指定UIView作用,通過將UIView的內容繪製到圖形上下文上然後擷取映像來達到截取UIView的效果。

作用對象:要截取的UIView對象

參數說明:

rect:圖形上下文上的地區,不是UIView的地區。將UIView繪製到圖形上下文rect的地區上。

afterUpdates:尚不清楚。推測設定成NO立即截取

 七. 先行編譯輸出宏定義
#ifdef DEBUG#define DebugLog(format,…)    NSLog(@"{%s,%d}" format, __FUNCTION__,__LINE__,##__VA_ARGS__)#else#define DebugLog(format,…)#endif

 系統宏介紹:

 __LINE__:宏在先行編譯時會替換成當前的行號

 __FUNCTION__:宏在先行編譯時會替換成當前的函數名稱

__VA_ARGS__:簡單的說,就是將左邊…的內容替換進來

##:宏串連符

參考

 八. 運算子

&:按位與

|:按位或

^:按位亦或

~:取反

>>:右移

參考

 九. 應用打包成ipa

1.先將運行模式設定為真機

2.Xcode上面菜單——Product——Archive

3.右擊工程,在finder中開啟

4.右擊——顯示包內容——Products——Applications 看到一個有禁止符號的檔案

5.開啟Itunes,將該拖進去,這樣就能在Itunes的應用程式一欄找到打包好的ipa檔案了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.