首页 > 其他 > 详细

Objective-C:保留计数器思想的详解(对象的保留和所有权的释放)

时间:2015-08-14 20:59:35      阅读:189      评论:0      收藏:0      [点我收藏+]

对象的保留和所有权的释放:

int main(int agrs,char *argv[])
{
  @autoreleasepool{
             Person *person = [[Person alloc]initWithName:@“Tom"];    //retainCount=1
             [person setName: name];  //retainCount = 2;
             [person release];
           }
}
@interface Person
@property(nonatomic,retain)(NSString*)name;
@end
 
详解:在主函数main中创建了一个perosn对象,此时,main函数拥有对象person的所有权,保留计数器retainCount=1;紧接着,因为类Person的实例变量name类型retain是强引用,因此,main函数中person对象调用setName方法时,类Person也拥有了person对象的所有权,所以,Person类就将保留计数器加1用来保留住person对象,此时的retainCount=2;根据对象谁创建,谁释放的原则,main函数中main函数拥有的perosn对象被main函数使用完后就释放其所有权,随即被main函数release掉了。此时,保留计数器retainCount=1,此时系统不会调用dealloc方法来销毁对象,对象被保留给了类Person。等到最后,类Person用完了对象person后,类Person也应该释放person对象的所有权,因此,就调用重写的dealloc方法,在这个方法内release掉person所有权,retainCount=0,在完成父类的【super dealloc】后,这个perosn对象就彻底的被销毁了。
 
总之两句话:(1)谁在调用这个对象,就必须获得其所有权,将对象保留住,防止直接被销毁了;
  (2)谁创建的对象,谁负责释放;谁调用的对象,谁负责释放。

Objective-C:保留计数器思想的详解(对象的保留和所有权的释放)

原文:http://www.cnblogs.com/XYQ-208910/p/4731000.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!