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
答案 0 :(得分:3)
当您在对象上发送release
消息时,该对象实际上未从内存中删除。发布消息只是仅将引用计数减少一个。如果引用计数为零,则将对象标记为空闲。然后系统将其从内存中删除。在发生此解除分配之前,您可以访问您的对象。即使您release
对象,您的对象指针仍然指向对象,除非您将nil
指定给指针。
答案 1 :(得分:1)
我认为那是因为你没有在name
的{{1}}内发布company
和dealloc
答案 2 :(得分:1)
发布不一定会破坏对象。它只是将保留计数减1。如果保留计数变为零,则只有该对象解除分配。因此,此代码有效,因为发布了一个但没有触发 dealloc 。
有关详细信息,请参阅Apple的memory management guide。