ios 開發(fā)若干技巧

1.定義函數(shù)時(shí),希望傳入的參數(shù)不為nil,或者為nil時(shí)會有警告顯示:

如下:

- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark

__atttribute__((nonnull(1, 2)));

p.s. index從1開始,不是0,且只對對象生效。

該技巧同樣來自,sunnyxx大神的微信,逗比狗~

2.定義函數(shù)時(shí),希望子類override該方法時(shí)候,必須調(diào)用super,否則編譯器直接報(bào)錯。

@interface OldSix:NSObject

- (void)fooWithNothing __attribute__((objc_requires_super));

該技巧同樣來自,sunnyxx大神的微信,逗比狗~

wait~~~~~

/*檢查子類在重寫該方法時(shí)有沒有調(diào)用自己(父類)的實(shí)現(xiàn)

*對于一些可以被繼承的類,需要子類在重某一調(diào)用父類的實(shí)現(xiàn)以保證正確的行為,通過在頭文件方法的聲明末尾添加`NS_REQUIRES_SUPER`

*可以讓編譯器檢查子類方法有調(diào)用父類的實(shí)現(xiàn)。具體使用方法如下:

* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;

*/

但是根據(jù)我的實(shí)際測試,發(fā)現(xiàn)sunnyxx大神仙的方法,沒有任何顯示效果,不知道是不是我打開的方式不對還是怎么,

總之,NS_REQUIRES_SUPER的方法親測可用。

3.誤刪系統(tǒng)sdk頭文件的解決辦法

在終端中輸入:

$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/

$ rm -rf *

4.ARC下打印retainCount

extern uintptr_t _objc_rootRetainCount(id obj);

id test = [NSString new];

NSLog(@"retain count %lu",_objc_rootRetainCount(test));

5.工程報(bào)錯下,仍然可以編譯成功

6.定位方法的調(diào)用者

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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