iOS之踩过的坑

坑一

我们知道,在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.hUIView+Extension.h,测试结果表明,UIView+Extension.h分类重复导入不会崩溃,而UITextView+Placeholder.h会。

iOS之踩过的坑_第1张图片
文件目录

因为UITextView+Placeholder.h中使用了KVO。

坑二

项目打包发布前一定要在release模式下测试一遍,Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 ;Debug是调试版本,Debug和Release调用两个不同的底层库。尤其是使用weakself时,在debug模式下很可能没问题,Release模式下就crash了!


iOS之踩过的坑_第2张图片
修改运行模式
iOS之踩过的坑_第3张图片
修改运行模式

坑三

同一个页面内如果有两个collectionview,一定要分别初始化两个collectionViewLayout,两个collectionview 使用一个collectionViewLayout就会crash!

坑四

项目名 does not have an architecture that 设备名 can execute.

这个问题主要是因为项目设置的ARM指令集,比设备指令集高,也就是项目没有兼容低版本设备的指令集导致的。所以需要我们设置更低的指令集来兼容低版本设备,这个设备版本不是iOS系统版本,而是硬件的版本,例如iPhone5、iPhone6这样的设备。


ARM指令集

你可能感兴趣的:(iOS之踩过的坑)