iOS 開(kāi)發(fā)小貼士

開(kāi)發(fā)過(guò)程中或多或少會(huì)碰見(jiàn)一些問(wèn)題和紀(jì)要梯醒,感覺(jué)有必要記下來(lái)苗踪,避免下次再犯郭宝,此文章后續(xù)會(huì)更新...

  1. iOS app通過(guò)itunes共享文件
    在程序的配置文件中添加Application supports iTunes file sharing,設(shè)置為YES盅粪;這里共享的是沙河的Document目錄

  2. DZNEmptyDataSet使用心得
    同mj刷新一起使用的時(shí)候咏删,一定要先endrefresh方法,然后再去刷新tableview拣凹,因?yàn)镈ZNEmptyDataSet是在reload數(shù)據(jù)的時(shí)候獲取tableview的偏移和bounds森爽,然后去設(shè)置空視圖的位置的,如果先reload嚣镜,則會(huì)導(dǎo)致空視圖空視圖顯示出來(lái)的時(shí)候往上偏了54像素爬迟,54從哪里冒出來(lái)的呢?全局搜了一下菊匿,發(fā)現(xiàn)mj刷新正在pulling的時(shí)候正好54付呕。

  3. 個(gè)人認(rèn)為開(kāi)發(fā)中涉及到系統(tǒng)權(quán)限的應(yīng)該統(tǒng)一放在一起,放在一個(gè)文件中跌捆。

  4. CocoaLumberjack 自定義logger輸出樣式

    1. 首先自定義一個(gè)類似DDLogFileFormatterDefault的formatter作為格式輸出徽职,實(shí)例化一個(gè)fomatter;
    2. 自定義一個(gè)ddloger佩厚,繼承于DDAbstractDatabaseLogger,重載db_log姆钉、db_save,添加post服務(wù)器方法;將第一步創(chuàng)建的formatter賦值給ddloger的formatter屬性可款;
    3. nslog打印

    注意:
    DDLog:基礎(chǔ)類育韩,必須引入的。
    DDASLLogger:支持將調(diào)試語(yǔ)句寫入到蘋果的日志中闺鲸。一般正對(duì)Mac開(kāi)發(fā)筋讨。可選摸恍。
    DDTTYLogger:支持將調(diào)試語(yǔ)句寫入xCode控制臺(tái)悉罕。我們即使要用它赤屋。可選壁袄。
    DDFileLogger:支持將調(diào)試語(yǔ)句寫入到文件系統(tǒng)类早。可選嗜逻。
    DDLog的輸出級(jí)別默認(rèn)提供以下若干種:
    DDLogError:定義輸出錯(cuò)誤文本
    DDLogWarn:定義輸出警告文本
    DDLogInfo:定義輸出信息文本
    DDLogDebug:定義輸出調(diào)試文本
    DDLogVerbose:定義輸出詳細(xì)文本

    提供的日志級(jí)別為:
    LOG_LEVEL_ERROR:只顯示錯(cuò)誤日志涩僻。
    LOG_LEVEL_WARN:包括:LOG_LEVEL_ERROR
    LOG_LEVEL_INFO:包括:LOG_LEVEL_WARN
    LOG_LEVEL_DEBUG:包括:LOG_LEVEL_INFO
    LOG_LEVEL_VERBOSE:包括:LOG_LEVEL_DEBUG
    LOG_LEVEL_OFF:關(guān)閉日志
    level = LOG_LEVEL_VERBOSE的時(shí)候,以上所有的level的打印日志都會(huì)進(jìn)行打印栈顷,在appdelegate中添加多少個(gè)logger逆日,就會(huì)形成幾種情況的日志,譬如:文件萄凤、數(shù)據(jù)庫(kù)室抽、控制臺(tái)等,添加自定義的之后便會(huì)增加一種日志形式(自定義的上傳給服務(wù)器的日志)
    問(wèn)題:

    1. 日志文件logger只會(huì)存入error和warning的日志嗎靡努?
    2. 日志文件只有一個(gè)嗎坪圾?如果不是,什么時(shí)候就會(huì)創(chuàng)建惑朦?
  5. category中添加成員變量
    .h

    @property (nonatomic, retain)   LBEmptyPageView * emptyView;
    @property (assign, nonatomic) BOOL  showNetError;
    
    static const void * emptyViewKey =  &emptyViewKey;
    
    @implementation BaseViewController  (EmptyDataSet)
    - (LBEmptyPageView *)emptyView {
    return objc_getAssociatedObject(self,   &emptyViewKey);
    }
    
    - (void)setEmptyView:(LBEmptyPageView *)emptyView {
      objc_setAssociatedObject(self,    emptyViewKey, emptyView,    OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (BOOL)showNetError{
       return   [objc_getAssociatedObject(self, _cmd)   boolValue];
    }
    
    - (void)setShowNetError:    (BOOL)showNetError{
    objc_setAssociatedObject(self, @selector(showNetError), @(showNetError), OBJC_ASSOCIATION_ASSIGN);
    }
    

    category使用原則:

    1. category的實(shí)現(xiàn)可以依賴主類兽泄,但主類一定不依賴category,也就是移除一個(gè)category的代碼不會(huì)對(duì)主類產(chǎn)生影響
    2. category可以直接食用主類已有的私有成員變量行嗤,但不應(yīng)該為實(shí)現(xiàn)catecory而在主類中添加成員變量已日,考慮通過(guò)上述的方式實(shí)現(xiàn)垛耳。
  6. 在用xib自定義tableview的頭部時(shí)候栅屏,有時(shí)會(huì)出現(xiàn)當(dāng)我NSbundle實(shí)例化之后改變它的frame不管用,這個(gè)可能xcode的bug或者是緩存問(wèn)題堂鲜,刪掉重新搞

  7. 之前碰到一個(gè)問(wèn)題就是缺少庫(kù)的問(wèn)題栈雳,第一次顯示缺AFNetWorking,我將AFNetWorking從cocoapods中刪除手動(dòng)添加之后缔莲,它又會(huì)報(bào)其它庫(kù)的錯(cuò)誤哥纫,一般這種問(wèn)題就是因?yàn)槁窂降膯?wèn)題,這里奉上解決方法:library search path 設(shè)置:$(inherited)

  8. iOS7報(bào)錯(cuò)信息:Library not loaded: /System/Library/Frameworks/Photos.framework/Photos
    Referenced from: /var/mobile/Applications/E19A46C1-C0EC-4DC3-A9CE-DC84811DD7E8/xxxx.app
    Reason: image not found
    解決方案:You need to weak link Photos.framework, not ALAssetsLibrary! Xcode -> Targets -> YourTargetName -> Build Phases -> Link Binary With Libraries -> Set Photos.framework to Optional.

  9. 圖片裁剪:可以實(shí)現(xiàn)美食杰啟動(dòng)頁(yè)圖片上下分開(kāi)動(dòng)畫(huà)效果

CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height *0.5, image.size.width, image.size.height *0.5))
  1. 播放GIF比較好的庫(kù):FlipBoard出品的FLAnimatedImage

  2. time profilter部分專詞意思
    Separate by Thread:按線程分開(kāi)做分析痴奏,這樣更容易揪出那些吃資源的問(wèn)題線程蛀骇。特別是對(duì)于主線程,它要處理和渲染所有的接口數(shù)據(jù)读拆,一旦受到阻塞擅憔,程序必然卡頓或停止響應(yīng)。
    Invert Call Tree:反向輸出調(diào)用樹(shù)檐晕。把調(diào)用層級(jí)最深的方法顯示在最上面暑诸,更容易找到最耗時(shí)的操作蚌讼。
    Hide Missing Symbols:隱藏缺失符號(hào)。如果 dSYM 文件或其他系統(tǒng)架構(gòu)缺失个榕,列表中會(huì)出現(xiàn)很多奇怪的十六進(jìn)制的數(shù)值篡石,用此選項(xiàng)把這些干擾元素屏蔽掉,讓列表回歸清爽西采。
    Hide System Libraries:隱藏系統(tǒng)庫(kù)文件凰萨。過(guò)濾掉各種系統(tǒng)調(diào)用,只顯示自己的代碼調(diào)用械馆。
    Flattern Recursion:拼合遞歸沟蔑。將同一遞歸函數(shù)產(chǎn)生的多條堆棧(因?yàn)檫f歸函數(shù)會(huì)調(diào)用自己)合并為一條。
    Top Functions:找到最耗時(shí)的函數(shù)或方法狱杰。

  3. NSSortDescriptor
    通過(guò)它可以實(shí)現(xiàn)數(shù)組內(nèi)模型根據(jù)某一個(gè)字段或者多個(gè)進(jìn)行排序瘦材,示例代碼如下:

//按年齡和名字排序,如果碰到年齡相等的,則根據(jù)名字排序
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_age" ascending:NO];
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"_name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, sortDescriptorName, nil];
[_mutArrVideo sortUsingDescriptors:sortDescriptors];
```

  1. 獲取數(shù)字?jǐn)?shù)組中的最大項(xiàng)和最小項(xiàng)

NSArray * arr = [NSArray arrayWithObjects:@"10",@"50",@"9", nil];
NSInteger max = [[arr valueForKeyPath:@"@max.intValue"] integerValue];
```

  1. 非主線程執(zhí)行UI操作檢測(cè)工具
    PSPDFUIKitMainThreadGuard.m

  2. 奇怪矩陣
    控制臺(tái)打臃禄:

    <Error>: CGAffineTransformInvert: singular matrix.
    May 11 16:19:48  LBAssistant[4704] <Error>:     CGAffineTransformInvert: singular matrix.
    May 11 16:19:48  LBAssistant[4704] <Error>:     CGAffineTransformInvert: singular matrix.
    

    并且相機(jī)黑屏食棕,但是拍到的照片是存在的,只是黑屏错沽,
    bug猜測(cè)原因是:UIActionsheet的問(wèn)題簿晓,更換自定義的就沒(méi)事兒了,但心里還是覺(jué)得此問(wèn)題不簡(jiǎn)單千埃,另有他因憔儿,還待高人指點(diǎn)。

  3. cell計(jì)算高度卡頓
    xib布局的自定義cell第一次計(jì)算高度卡頓2s放可,其原因是:布局中l(wèi)able使用了第三方字體(黑體)谒臼,非系統(tǒng)字體

  4. brew update 出錯(cuò):Error: /usr/local must be writable!? 解決方案:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  5. 關(guān)于寫入權(quán)限的問(wèn)題

    sudo chown demoker /Library/Caches/Homebrew
    

    demoker 是你當(dāng)前用戶名,后面的是你受權(quán)限限制的文件目錄

  6. 關(guān)于injectionforXcode 使用時(shí)碰到的問(wèn)題

    1. 真機(jī)運(yùn)行
      解決方法:在main.m或者.pch中添加??代碼:
      #ifdef DEBUG
          static char _inMainFilePath[] = __FILE__;
          static const char *_inIPAddresses[] = {"192.168.83.47", "127.0.0.1", 0};
          //??兩個(gè)聲明可加可不加
          #define INJECTION_ENABLED
          #import "/tmp/injectionforxcode/BundleInjection.h"
      #endif
      
    2. Could not codesign as 'iPhone Developer':/Users/...

    tip_19.png

    issue圖片中寫得很清楚了證書(shū)到底是圖中兩個(gè)證書(shū)里面的哪一個(gè)耀里,解 決方法就是修改iOSInjectionProject/x86_64/identity.txt 文件中證書(shū)為正 確的那一個(gè)即可蜈缤,這樣就可以使用這個(gè)插件了??。[參考] (https://github.com/johnno1962/injectionforxcode/issues/41)

  7. synx 同步iOS工程目錄
    Xcode下面直接創(chuàng)建Group時(shí)在本地項(xiàng)目文件夾中并不會(huì)形成實(shí)體文 件夾冯挎,通過(guò)synx可以將Group目錄同步底哥。使用:

    1. 安裝
      sudo gem install synx
    2. 使用
      synx your path

CocoaPods管理的庫(kù)要重新pod install一次,手動(dòng)添加的Framework也要重新添加房官。

  1. Realm pod install 失敗

[!] /bin/bash -c
set -e
sh build.sh cocoapods-setup

core is not a symlink. Deleting...
Downloading dependency: core 1.0.1
Downloading core failed:
curl: (56) SSLRead() return error -36
```
解決方法:
```rm -rf Pods```趾徽,刪除工程目錄下的pods文件夾,然后重新   pod install翰守,安裝Realm的時(shí)候會(huì)慢一些孵奶,等了很長(zhǎng)時(shí)間...解決方     法  參考鏈接[??](https://github.com/realm/realm-cocoa/   issues/2713)
    
```
curl https://static.realm.io/downloads/core/realm-core-1.0.1.tar.bz2 -O
mkdir $TMPDIR/core_bin
mv realm-core-1.0.1.tar.bz2 $TMPDIR/core_bin
22. 子類是可以調(diào)用父類xib文件進(jìn)行實(shí)例化的,例如LBWebViewController
23. sublime 插件安裝方法:[鏈接](https://packagecontrol.io/installation#st3)
      1. 
```ctrl+ `
```,打開(kāi)console潦俺,執(zhí)行
```simple
```中的命令拒课,即可
      2. 安裝完
```package control.sublime-package
```,就可以安裝其他插件了
      3. 
```shift+command+p
``` 找到
```install package
```命令徐勃,回車,然后輸入需要安裝的插件名稱早像,再回車就可以了
24. realm pod 報(bào)錯(cuò)'object_schema.hpp' file not found 
     
    ```
    1. rm -rf Pods
    2. rm -rf ~/Library/Caches/CocoaPods
    ```


Done.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末僻肖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卢鹦,更是在濱河造成了極大的恐慌臀脏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冀自,死亡現(xiàn)場(chǎng)離奇詭異揉稚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熬粗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門搀玖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驻呐,你說(shuō)我怎么就攤上這事灌诅。” “怎么了含末?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵猜拾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我佣盒,道長(zhǎng)挎袜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任肥惭,我火速辦了婚禮盯仪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘务豺。我一直安慰自己磨总,他們只是感情好嗦明,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布笼沥。 她就那樣靜靜地躺著,像睡著了一般娶牌。 火紅的嫁衣襯著肌膚如雪奔浅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天诗良,我揣著相機(jī)與錄音汹桦,去河邊找鬼。 笑死鉴裹,一個(gè)胖子當(dāng)著我的面吹牛舞骆,可吹牛的內(nèi)容都是我干的钥弯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼督禽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脆霎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起狈惫,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤睛蛛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胧谈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忆肾,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年菱肖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了客冈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稳强,死狀恐怖郊酒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情键袱,我是刑警寧澤燎窘,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站蹄咖,受9級(jí)特大地震影響褐健,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澜汤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一蚜迅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俊抵,春花似錦谁不、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谎替,卻和暖如春偷溺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钱贯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工挫掏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秩命。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓尉共,卻偏偏與公主長(zhǎng)得像褒傅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袄友,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容