1、內存分配、釋放成對出現
2、注意copy,retain,assign操作符的區別(copy,retain同alloc一樣需要release,assign指的是將對象指向另一個對象)
3、NSArray,NSDictionary,NSMutableArray,NSMutableDictionary等容器類,在添加對象到這些類對象時,容器類會自動調用一次retain,即使對象調用release,reference count只是減一,可能不為0,意味對象還有引用,不可釋放
4、連續重複分配內存的過程(如while、for循環中alloc)最好創建自己的自動釋放池NSAutoreleasePool,或alloc和release操作放到循環閉包的外面(繁體看着也挺費勁的,換簡體了),这是由于频繁地向操作系统申请内存地址和释放内存的过程非常损耗cpu时间,如果循环内部实现的逻辑十分复杂,不能将alloc和release抽离出循环体外,那么就要创建自己的内存管理池,其实就是弄个pool对象,把所有的alloc的对象标记为autorelease,在最后把内存池release掉,那么系统会在需要的时候释放整理所有的autorelease对象,这就是为什么有时候autorelease对象在作用域范围外还有可能是有效的
5、避免不常用的对象驻留内存,iphone开发跟桌面开发不一样这你我都知道,所以没必要在程序初始化的时候将某些资源(比如小图片)加载进内存,这里情况就非常类似web开发时候用到的懒加载(延迟加载),原因其实是一样的,iphone是内存的限制,web服务是带宽的限制,当然这也要自己找好一个平衡点,像第4点提到的频繁的向os要内存也会拖慢效率的