1.缓存
转换过程中需要很多类的元数据,如果数据足够小,则全部缓存到内存中。
2.查表
当遇到多项选择的条件时,要尽量使用查表法实现,比如switch/case , C Array, 如果查表条件时对象,则可以用NSDictionary来实现
3.避免KVC
Key-Value Coding使用起来非常方便,但性能上要差于直接调用Getter/Setter, 所以能避免KVC而用Getter/Setter代替,性能会有较大提升
4.避免Getter/Setter调用
如果能直接访问ivar,则尽量使用ivar而不要使用Getter/Setter,这样也能节省一部分开销。
5.避免多余的内存管理方法
在ARC条件下,默认声明的对象是__strong类型的,赋值时有可能产生retain/release调用,如果在其生命周期内不被释放,则使用__unsafe_unretained会节省很大的开销
访问__weak修饰的变量,实际上会调用objc_loadWeak()和objc_storeWeak()来完成,这也会带来很大的开销,所以也要避免使用__weak属性
创建和使用对象时,要尽量避免对象进入autoreleasepool,以避免额外的资源开销
6.遍历容器类时,选择更高效的方法
相对于Foundation的方法来说,CoreFoundation的方法具有更高的性能,用CFArrayApplyFunction()和CFDictionaryApplyFunction()方法来遍历容器类能带来性能提升,但代码复杂
7.尽量使用纯C函数,内联函数
使用纯C函数可以避免ObjC的消息发送带来的开销,如果C函数比较小,使用inline可以避免一部分压栈弹栈等函数调用的开销
8.减少遍历的循环次数
在JSON和Model转换前,Model的属性个数和JSON的属性个数都是已知的,选择数量较少的一方进行遍历
本文来源于https://blog.ibireme.com/2015/10/23/ios_model_framework_benchmark/#more-41804