Xcode
1.Shift+Command+O:在當(dāng)前項目內(nèi)全局搜索,快速打開文件
2.尋找UI界面的元素,用3D可視化調(diào)試方式单山。搜索關(guān)鍵中文字段榨馁,定位VC
3.Control+Command+上 : 同名的 .m .h文件切換
4.category的使用:擴(kuò)展原生類的功能黎休,任務(wù)拆分式镐。
例如給圖片加水印UIImage+Watermark,
5.#pragma mark 注釋犯戏,便于查找送火,定位,備注要規(guī)范便于直接關(guān)聯(lián)
6.復(fù)用Cell:重寫prepareforuse方法先匪,置一些nil种吸,解決一些數(shù)據(jù)錯亂的問題。
7.調(diào)試不在開發(fā)組的機(jī)器:關(guān)掉所有capabilities胚鸯,刪掉無關(guān)target骨稿,更改bundle ID,使用個人證書signing姜钳。
快速創(chuàng)建文件 Command+N
8.同時改變一個變量名的多個副本:節(jié)約時間:command+E—>command+G—>command+control+E
9.初始化基本類型的時候盡量設(shè)置初始值, 因為編譯器分配的初始值并不確定, 但是對象類型會默認(rèn)初始化為nil.
10.手動下載ios某個版本的silmulator坦冠,速度太慢。用迅雷下載哥桥,再放入對應(yīng)文件夾辙浑,繼續(xù)下載可以識別。
1.target缺少主項目等拟糕,點擊它判呕,manage schemes倦踢。打鉤
2.pod install生成的是pod文件夾和項目的workspace文件。同時刪除它們可以清除緩存然后重新生成侠草。
3.在當(dāng)前編程位置添加斷點辱挥,快速定位
4.查看沙盒內(nèi)容:window-devices-某個app-設(shè)置按鈕,download container边涕。iFunBox工具更加高效晤碘。
5.filepath的NSString和NSURL之間轉(zhuǎn)換要注意? file:///、file:/? 等前綴的重復(fù)添加.使用字符串replace函數(shù)刪除內(nèi)容功蜓。
1.修改應(yīng)用名字和類名前綴
項目名稱也可以在這里改 (優(yōu)先選擇第二種)
2.代碼分組
例:#pragma mark - UITableViewDelegate
3.修改Scheme
4.截取模擬器屏幕
快捷鍵 commmad+s 會保存在桌面上
5.顯示模擬器中的鍵盤
選中模擬器园爷,在屏幕上方的菜單中找到Hardware->Keyboard
或者直接快捷鍵shift+command+k
6.在模擬器中實現(xiàn)多點觸控
按住option 鍵
7.為什么iOS7以后的圖都是直接@2x
因為iOS7不支持非retain屏設(shè)備
8.xcode中identitf 身份和deployment info 部署信息
bundle identifier:識別唯一應(yīng)用的標(biāo)識
version:版本 build:對應(yīng)版本下的第幾個
如下圖:
version為1 build為2
team
1.支持的最低版本
2.支持的設(shè)備 有iPhone iPad 通用 三個選項
4.設(shè)備支持的旋轉(zhuǎn)方向
5.電池條的樣式 和下面的是否隱藏(是否隱藏選項之前是during launch)主要方便在啟動圖啟動的時候隱藏的
9.添加iPad 模擬器
在模擬器菜單欄選擇 Hardware(計算機(jī)硬件)選擇manageDevices
在彈出的界面點擊左下角的+ 然后是現(xiàn)在的界面 然后你就可以添加ipad模擬器了
10.查看 一個.a文件是否支持64位
lipo -info 文件
11.查看UID
鏈接iTunes 在右上角找到你的設(shè)備點擊 ->點擊摘要 ->第一個框里面容量下面 點一點
12.添加分類文件
command + N ->iOS Source ->Objective-C File ->File Type:Category
13.進(jìn)入Provisioning Profiles頁面
~/Library/MobileDevice/Provisioning Profiles
14.在Xcode中快速搜索瀏覽文件、類式撼、算法以及函數(shù)等
Command+Shift+O
15.在界面左側(cè)的項目導(dǎo)航欄中顯示當(dāng)前文件
Command + Shift + J
16.option+command+/? ? :? 文檔注釋
iOS APP沙盒內(nèi)文件夾路徑
// 獲得應(yīng)用程序沙盒的Documents文件夾路徑
NSArray *arrDocumentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentPath=[arrDocumentPaths objectAtIndex:0];
NSLog(@"Documents path: %@",documentPath);
// 獲得應(yīng)用程序沙盒的Caches文件夾路徑
NSArray *arrCachesPaths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *CachesPath=[arrCachesPaths objectAtIndex:0];
NSLog(@"Caches path: %@",CachesPath);
// 獲得應(yīng)用程序沙盒的Downloads文件夾路徑
NSArray *arrDownloadPaths=NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory,NSUserDomainMask,YES);
NSString *loadPathsPath=[arrDownloadPaths objectAtIndex:0];
NSLog(@"Downloads path: %@",loadPathsPath);
// 獲得應(yīng)用程序沙盒的home文件夾路徑
NSString *homePath= NSHomeDirectory();
// 獲得應(yīng)用程序沙盒的tmp文件夾路徑
NSString *TmpPath= NSTemporaryDirectory();
//寫入文件NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);
NSString?*docDir?=?[paths?objectAtIndex:0];
if?(!docDir)?{
NSLog(@"Documents?目錄未找到");
}
NSArray?*array?=?[[NSArray?alloc]?initWithObjects:@"內(nèi)容",@"content",nil];
NSString?*filePath?=?[docDir?stringByAppendingPathComponent:@"testFile.txt"];
[array?writeToFile:filePath?atomically:YES];
//移除Library/videos文件夾下的所有文件
NSArray *cachePaths =? NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *cachesPath=[cachePaths objectAtIndex:0];
NSString *thePath = [NSString stringWithFormat:@"%@/videos",cachesPath];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:thePath error:nil];
7童社、在對象內(nèi)部盡量直接訪問實例變量
* 點語法訪問:經(jīng)過getter方法
* 直接訪問:不經(jīng)過getter方法,速度更快著隆,不會觸發(fā)KVO
* 解決方法:讀取數(shù)據(jù)扰楼,直接訪問,寫入數(shù)據(jù)旅东,屬性(點語法)訪問灭抑,在初始化方法和dealloc中十艾,始終使用直接訪問方式抵代。
26、勿在分類中聲明屬性
38忘嫉、為常用的塊類型創(chuàng)建typedef
#define RUN_IN_MAIN_THREAD_START dispatch_async(dispatch_get_main_queue(), ^{
#define RUN_IN_MAIN_THREAD_END });
#define RUN_IN_BACKGROUND_THREAD_START dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
#define RUN_IN_BACKGROUND_THREAD_END });