- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
第二個參數的意思是:
如果為YES則保證文件的寫入原子性,就是說會先創建一個臨時文件,直到文件內容寫入成功再導入到目標文件里.
如果為NO,則直接寫入目標文件里.
參數依次為:
1、錯誤域(NSString)
2、錯誤標識 (NSInteger)
3、錯誤信息 (字典)
NSError *error = [NSError errorWithDomain:@"錯誤域" code:400 userInfo:@{NSLocalizedDescr錯誤信息"}];
NSLog(@"%@",error.localizedDescription);
NSLog(@"%@",error.description);
注意:error.description并不是錯誤信息,NSError沒有description這個屬性來描述錯誤信息,這是對error對象的描述
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:函數,到生命周期的最后一步viewDidAppear:,這些任務事先都已被放置在了主隊列中,并排在任務B的前面)執行完畢后才會將任務B從主隊列中取出,放在主線程中執行。這就是為什么先執行A,C。再執行B的原因。因此,viewDidLoad一直到viewDidAppear方法執行完畢,才會去執行B。
關于創建圖形上下文的兩個方法
方法一:UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);
方法二:UIGraphicsBeginImageContext(CGSize size);
方法一中3個參數依次表示:
size:創建的圖形上下文的尺寸大小
opaque:圖形上下文是否透明 YES為不透明(當圖形完全不透明是設置成YES,否則設置成NO,以優化性能)
scale:圖像縮放比例(用于調整圖像分辨率)。
在理解之前首先要知道的是,對于手機屏幕而言,我們用分辨率在衡量屏幕的清晰度。分辨率的單位是像素,以iphone6為例,分辨率為750*1336像素。iphone6屏幕的點數是375*568。因此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。因此用這個方法創建圖形上下文得到的圖像質量會比較低(除非iphone3GS)。圖像的質量從圖像的大小就能區別出來,將獲取到的圖像保存到沙盒,查看圖像大小,輕松辨別。
- (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__:簡單的說,就是將左邊…的內容替換進來
##:宏連接符
&:按位與
|:按位或
^:按位亦或
~:取反
>>:右移
1.先將運行模式設置為真機
2.Xcode上面菜單——PRoduct——Archive
3.右擊工程,在finder中打開
4.右擊——顯示包內容——Products——applications 看到一個有禁止符號的文件
5.打開Itunes,將該拖進去,這樣就能在Itunes的應用程序一欄找到打包好的ipa文件了。
新聞熱點
疑難解答