0
 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

4

3 回答 3

3

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

于 2013-02-28T10:29:44.797 回答
1

我想那是因为你没有释放name并且在company里面deallocProfile

于 2013-02-28T10:28:12.710 回答
1

释放不一定会破坏对象。它只是将保留计数减一。如果该保留计数变为零,则只有该对象才会被释放。因此,此代码有效,因为发生了释放但没有触发dealloc

有关更多详细信息,请参阅 Apple 的内存管理指南

于 2013-02-28T10:29:59.050 回答