objective-c内存管理一点总结

http://1qaz2wsx3edc.iteye.com/blog/1523830

objc 内存管理 

1. 对象生命周期 
1) 诞生: new  or alloc 
2) 生存: 接收消息和执行操作 
3) 交友: 借助组合的方法和参数 
4) 死去: 被释放 
2. 方法 
1) –(id) retain; 
2) –(void) release; 
3) –(unsigned) retainCount; 
3. 引用计数 
1) 每个对象都有一个与之相关联的整数---引用计数 
2) 计数规则为 
i. 访问+1 访问结束-1   为0  销毁 
ii. 当创建或者copy的时候调用retain为计数器+1 
iii. 当销毁当前对象 调用release 为计数器-1 
iv. 当计数器为0的时候,objc自动调用dealloc方法,释放全部内存 
v. 获取计数器得当前值 retailCount 
4. 访问方法的保留和释放(复合时使用) 
1) { 
        Mode mode 

      –(void) setMethod:(Mode *)newMode{ 
[newMode retain]; 
[mode release]; 

这个方法针对两种情况 
1. mode 和 newMode 不一样。普通的set 
现在mode是空的。没有初始化。 所以 mode release 没有影响,而newModw retainCount 是两次,赋给mode(现在是指针)  set完后  main方法负责清理一次。 所有调用的对象那还有一次。 

2. mode和newMode一样 
newMode 先添加一次, 使mode变成了2,然后mode减去一次,变成了1.所以main方法可以释放掉mode 
-(void) dealloc{ 
//释放该对象内所有的内置对象 
[super dealloc]; 

5. 需要及时释放的及时释放 
1) 比如NSString  在返回的时候 把NSString对象添加到 NSAutoreleasePool 里面 
[str autorelease] 
6. 因为有了自动释放池 所以 5的情况可以不考虑 
1) 最好使用pool release 使用所有版本的mac os系统 
7. 在任何时候向一个对象发送autorelease详细,该xuiduixiang都会被添加到自动释放池中。 
8. Cocoa内存管理规则 
Ps: iphone开发时,如果可以自己release,尽量自己管理 
1) 当不再使用一个对象后,必须清理掉或者添加到自动释放池中。 
2) 当你得到的对象已经设置成自动释放,则你不需要执行任何操作确保该对象被清理。如果你需要持有该对象一段时间,必须在使用后释放 
3) 如果你保留了某个对象,你需要(最后)释放或者自动释放该对象,必须保持retain和release方法使用的次数相等 

9. 不是自己 alloc   new   copy 出来的对象,不需要管理 
10. 希望对放在自动释放池中的对象进行持有则需要在使用完后 retain , 在dealloc  release掉他。符合内存管理规则中的retain一次必须releas一次。 
11. 创建多局部变量 
       Objective-C程序中可以嵌套创建多个autorelease pool。在需要大量创建局部变量的时候,可以创建内嵌的autorelease pool来及时释放内存。 
int main (int argc, const char *argv[]) 

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i, j; 
for (i = 0; i < 100; i++ ) 

NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init]; 
for (j = 0; j < 100000; j++ ) 
    [NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。 
[loopPool release]; 

[pool release]; 
return (0); 
} // main 

12. 自动管理机制(用不上) 
13. 放在集合里面对象 不用管理 , 集合销毁时对象也被销毁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值