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
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
当您在对象上发送release
消息时,该对象实际上并没有从内存中删除。释放消息只是将引用计数减一。如果引用计数为零,则该对象被标记为空闲。然后系统将其从内存中删除。在此释放发生之前,您可以访问您的对象。即使您release
是对象,您的对象指针仍然指向该对象,除非您分配nil
给该指针。
我想那是因为你没有释放name
并且在company
里面dealloc
Profile
释放不一定会破坏对象。它只是将保留计数减一。如果该保留计数变为零,则只有该对象才会被释放。因此,此代码有效,因为发生了释放但没有触发dealloc。
有关更多详细信息,请参阅 Apple 的内存管理指南。