解决方法就不一一列举了,有一定经验的朋友应该马上能想到。
1. block 获取外部局部变量时,持有该对象导致的循环引用
2. performSelector ,运行时才知道selector的值,所以不清楚是否有返回值以决定是否应该释放。所以ARC采取了谨慎的不释放策略。此时,如果返回了对象就可能将其持有,从而导致内存泄露。
3. NSTimer ,addTarget时会持有对象。self持有timer,timer持有self,导致循环引用,需要对timer调用invalidate。
4. try ···catch ,释放在throw后会导致内存泄露。