1.少用+load方法,尽量使用+initialize。+load是在main方法执行之前就会执行,+initialize是在类首次被使用的时候才会执行,即main方法执行之后;
2.使用NSTimer时,需要注意内存泄漏问题,计时器会保留目标对象。使用中间者持有NSTimer,或者让NSTimer的addTarget对象为其他对象,可以参考 NSTimer+YYAdd ,这里是将定时器自身作为addTarget对象;
3.delegate属性使用weak修饰符,而不要使用assign。避免循环引用,同时不会产生野指针;
4.FMDatabaseQueue 是一个同步串行队列,操作数据库时,如果读取的数据量较大会阻塞主线程,可以考虑创建一个常驻线程来操作数据库
5.加载图片时,尽量使用对应尺寸的图片来加载(或差不多大小的图片),对于网络图片,现在都有方法去获取对应尺寸大小的图片(各种云服务的对象存储都有提供);
6.如果有圆角,尽量避免 layer.cornerRadius 和 layer.masksToBounds 同时使用,同时使用会造成离屏渲染,可以使用CAShapeLayer绘制圆角;
7.如果对象中的block是一个强引用属性(copy属性),需要注意循环引用问题;
8.解决block循环引用会用到 _ _weak typeof,在block代码块执行过程中,有时会考虑到弱引用对象提前释放问题,所以会使用 _ _strong typeof 来对弱引用对象进行内部强引用,这种内部强引用的方式不会引起循环引用问题。需要注意的是,在执行 _ _strong typeof 时,如果引用的对象本身就已经释放了,那么此时内部强引用的对象会是一个空对象,这种情况需要做判空处理。
9.使用dispatch_sync 时,如果执行的队列是串行队列,需要注意死锁问题。
10.使用 CoreFoundation 创建的对象需要自行处理释放问题