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

6.定位方法的调用者

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,768评论 0 9
  • 前言 通过阅读别人的优秀源码,你会发现别人的开源API设计中,有一些宏你是经常忽略的,或者你不知道的。通过这些宏,...
    gitKong阅读 5,200评论 5 41
  • 好久不画,一撸,丑哭自己,果然和当年一样丑。(ー_ー)!! 我是不是不适合画画,没耐心啊。命中缺奋斗。。。 想好好...
    闲九月阅读 268评论 0 0
  • 读书困倦,回首寒光,念今夕无驻,时光难继,佳人长隔。因作《燕归梁》以记之。词云: 独卧寒窗桂未香。怕雪风飘凉。玉人...
    冰眉铁面阅读 405评论 0 3
  • 我第一次见到他,是高中开学的时候,16、7的年纪,情窦初开,就像电视剧里演的那样,他自带光芒,让人挪不开眼睛。在那...
    会哭的饼干阅读 142评论 0 0