iOS小技巧 (持续更新)

1.定义函数时,希望传入的参数不为nil,或者为nil时会有警告显示:

如下:

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

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

p.s. index从1开始,不是0,且只对对象生效。

该技巧同样来自,sunnyxx大神的微信,逗比狗~


2.定义函数时,希望子类override该方法时候,必须调用super,否则编译器直接报错。

@interface OldSix:NSObject

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

该技巧同样来自,sunnyxx大神的微信,逗比狗~

wait~~~~~

/*检查子类在重写该方法时有没有调用自己(父类)的实现

*对于一些可以被继承的类,需要子类在重某一调用父类的实现以保证正确的行为,通过在头文件方法的声明末尾添加`NS_REQUIRES_SUPER`

*可以让编译器检查子类方法有调用父类的实现。具体使用方法如下:

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

*/

但是根据我的实际测试,发现sunnyxx大神仙的方法,没有任何显示效果,不知道是不是我打开的方式不对还是怎么,

总之,NS_REQUIRES_SUPER的方法亲测可用。


3.误删系统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.工程报错下,仍然可以编译成功

iOS小技巧 (持续更新)_第1张图片

6.定位方法的调用者

iOS小技巧 (持续更新)_第2张图片

你可能感兴趣的:(iOS小技巧 (持续更新))