即使在释放方法被称为ios之后,我也能够访问对象变量

时间:2013-02-28 10:16:41

标签: ios objective-c

 Profile *myProfile= [[Profile alloc]init];

[myProfile setName:@"Jhon Applesead"];
[myProfile setCompany:@"Apple"];

[myProfile release];

NSLog(@"Name is %@", [myProfile name]);

日志

2013-02-28 15:41:36.866练习[8124:303]名字是Jhon Applesead

3 个答案:

答案 0 :(得分:3)

当您在对象上发送release消息时,该对象实际上未从内存中删除。发布消息只是仅将引用计数减少一个。如果引用计数为零,则将对象标记为空闲。然后系统将其从内存中删除。在发生此解除分配之前,您可以访问您的对象。即使您release对象,您的对象指针仍然指向对象,除非您将nil指定给指针。

答案 1 :(得分:1)

我认为那是因为你没有在name的{​​{1}}内发布companydealloc

答案 2 :(得分:1)

发布不一定会破坏对象。它只是将保留计数减1。如果保留计数变为零,则只有该对象解除分配。因此,此代码有效,因为发布了一个但没有触发 dealloc

有关详细信息,请参阅Apple的memory management guide