继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

iOS之踩过的坑

MMTTMM
关注TA
已关注
手记 432
粉丝 65
获赞 364

坑一

我们知道,在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会。

文件目录

因为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这样的设备。


ARM指令集



作者:檀羽冲
链接:https://www.jianshu.com/p/aa0aaebf8dda


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP