下面是我自己结合项目对内存管理的一些总结:
一:临时变量
对于临时变量比如 UILabel *label=[[UILabel alloc]init]; 之后 赋值给其它变量不在使用时 要 释放 [label release];
当然也可以通过自动释放池进行释放 例:UILabel *label=[[[UILabel alloc]init]autorelease];
二:属性变量
公有属性变量:最好在 .m文件中 @synthesize 变量名称
然后初始化公用属性时:用@synthesize 变量名称 中的变量名进行初始化 或者 创建一个临时变量 再将临时变量赋值给 公用属性变量 然后再将临时变量给释放掉!
私有属性变量:再初始化使用属性变量时 直接用 私有属性变量名 进行私有属性变量的初始化
公用属性和私有属性的内存的释放:统一在 -(void)dealloc{};中释放 ,一般各个对象例:[tableView realease];就可以了 也可以 现将对象置空 在释放:[tableView realease]; tableView=nil;
后者比较保险,不易产生 野指针 比较安全!
三:对于返回对象的内存释放:在创建的适合 通过[[XX alloc]init]autorelease] 的方式进行初始化!
四:对于互相引用的属性,在mrc中其中一个采用 (nonatomic,assign)id delegate; 来避免循环引用造成的内存泄露!
五:对于代码块的使用:因为 block中会直接访问self对象,当 self对象本身持有block对象时就会出现循环引用的问题!
这类问题的解决方案:用临时变量接收self.属性值 然后直接使用临时变量的值 就可以了 或者:
用到 self的地方 将其变成 __block__weak 弱引用类型即可!
六:对于工程中创建的通知对象:一定要在-(void)dealloc{}中 或 -(void)viewWillDisappear{}中进行通知的移除
通知的移除:可以对单个具体通知进行移除 或者 将所有通知都移除掉:[【NSNotificationCenter defaultCenter】removeObserver:self] 进行移除!