oc -内存管理 笔记

1.

对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。

那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop。 

上面那句话不怎么好理解 说的很虚。还是看个实际的例子:

 

int main (int argc , const char * argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Person *person=[Person new];
[person setName: @"张明"];
[person setPid: 1];
[person setHeight: 185.5];
//归档对象
NSData *data=[NSKeyedArchiver archivedDataWithRootObject: person];
[data writeToFile: @"person.db" atomically: NO];
[person release];
//还原数据为对象
Person *person2=[NSKeyedUnarchiver unarchiveObjectWithData: data];
NSLog(@"%@",[person2 name]);
[pool release];
return 0;
}

这里这里函数前面声明了

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

这个作用就是:将他下面新建的对象(除new allc copy以外,如果alloc init autoralease 那这个就是手动将对象放到池中),多已经将对象放到了这个pool中  我们只要在不行要的时候调用【pool release】 就能清除内存。

所以我们看到

person release];
而不需要我们手动去释放 data 和person2两个对象、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值