坑一
我们知道,在Xcode
里,如果两个文件重名,编译的时候会报一个 2 duplicate symbols
的错误,但是如果是两个分类重名呢,会报错吗(不在同一个文件夹下)?答案是:不会
我在实际项目中遇到了这样一个闪退的问题,控制台报错如下:
An instance 0x7fef5c023400 of class UITextView was deallocated while key value observers were still registered with it
。
最后定位原因是因为项目中导入了两个UITextView+Placeholder.h
的分类。
于是我新建了一个新项目,新建两个文件夹,分别导入两个分类,UITextView+Placeholder.h
和UIView+Extension.h
,测试结果表明,UIView+Extension.h
分类重复导入不会崩溃,而UITextView+Placeholder.h
会。
因为UITextView+Placeholder.h
中使用了KVO。
坑二
项目打包发布前一定要在release模式下测试一遍,Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 ;Debug是调试版本,Debug和Release调用两个不同的底层库。尤其是使用weakself时,在debug模式下很可能没问题,Release模式下就crash了!
坑三
同一个页面内如果有两个collectionview,一定要分别初始化两个collectionViewLayout,两个collectionview 使用一个collectionViewLayout就会crash!
坑四
项目名 does not have an architecture that 设备名 can execute.
这个问题主要是因为项目设置的ARM指令集,比设备指令集高,也就是项目没有兼容低版本设备的指令集导致的。所以需要我们设置更低的指令集来兼容低版本设备,这个设备版本不是iOS系统版本,而是硬件的版本,例如iPhone5、iPhone6这样的设备。