一、平台兼容性

各个平台都需要测试验证,包括各种真机、越狱机、最新iOS版本,特别是iPhone6后出的64位机型。


二、三方库的兼容性

  ios中第三方库使用比较频繁,但这会产生一些兼容性的问题。

      比如使用Jsonkit库时,老的代码没有对64位很好的支持,在iphone 6/Plus上就会出现crash。

ios排查第三方库的内存泄漏 ios 第三方库冲突_内存泄露

下载64位的三方库即可。


三、 三方库的使用


在开发中,为了开发的效率,经常会用到三方库,如果是自己的项目组APP的开发,这是可以的。但如果是开发SDK,提供给多种APP使用的话,三方库就要谨慎使用。最好是使用系统提供的API实现,不要使用三方库,一方面是为了防止冲突,另一方面是让app方觉得你的sdk集成没那么复杂,对三方依赖性弱。

比如在我们的项目开发中,使用JSONkit时,就遇到一些问题。

(1) 越狱机子出现以下问题:


ios排查第三方库的内存泄漏 ios 第三方库冲突_ios排查第三方库的内存泄漏_02


AppAnalyze.dylib应该是91助手的动态库,它自己重新定义了NSDictionary的JSONKitSerializing category,就把JSONKit里面同名的覆盖了,所以出现问题。


(2) 使用QQ的某款SDK后,也会出现一样的问题。

ios排查第三方库的内存泄漏 ios 第三方库冲突_ios排查第三方库的内存泄漏_03


所以,由于IOS中没有名字空间的概念,在使用第三方库时,如果不在意代码冗余的话,就要对他进行重命名;或者直接使用系统的API来实现。


四、 开发SDK

 开发SDK供APP使用,这时就需要注意一些问题:

(1) 符号重复问题.

因为APP可能还使用其他的一些SDK,不同SDK有可能符号重复了。所以,定义类名、函数等时,需要定义成独一无二的形式。

(2) 接口尽量方便

传入的参数尽量sdk内部转化,比如需要经纬度时,传递double,如果需要NString,自己内部转化。

如果既需要读,有需要写,才定义成属性的形式。只是写的话,通过方法参数传递。

(3)单例模式慎用

单例模式是程序运行期间一直存在的。



五、内存泄露问题

在非ARC模式下,内存泄露很容易发生,但即使在iOS提供了ARC功能,虽然很大程度上简化了内存管理的代码,但并不代表了不会发生内存泄露,使用不当照样会发生内存泄露。



(1) 循环参照

(2) 死循环

(3) C语言风格的一些写法

ios排查第三方库的内存泄漏 ios 第三方库冲突_ios开发_04

对于CF的使用或者C语言形式,一定要记得释放,一下是两个例子。

ios排查第三方库的内存泄漏 ios 第三方库冲突_内存泄露_05


ios排查第三方库的内存泄漏 ios 第三方库冲突_ios开发_06



所以在IOS开发中,一定要记得使用内存检查工具:Analyze 和instruments去检查内存泄露