1.定義函數(shù)時原朝,希望傳入的參數(shù)不為nil根竿,或者為nil時會有警告顯示:
如下:
- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark
__atttribute__((nonnull(1, 2)));
p.s. index從1開始缰贝,不是0,且只對對象生效。
該技巧同樣來自京痢,sunnyxx大神的微信,逗比狗~
2.定義函數(shù)時挥吵,希望子類override該方法時候重父,必須調(diào)用super,否則編譯器直接報錯忽匈。
@interface OldSix:NSObject
- (void)fooWithNothing __attribute__((objc_requires_super));
該技巧同樣來自房午,sunnyxx大神的微信,逗比狗~
wait~~~~~
/*檢查子類在重寫該方法時有沒有調(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.工程報錯下贾陷,仍然可以編譯成功
6.定位方法的調(diào)用者