- //仅实现部分
- #import < Foundation / Foundation.h > #import "Person.h"@implementation Person
- //当一个Person对象被回收,就会自动调用这个方法
- - (void) dealloc {
- NSLog(@"Person对象被回收");
- //super dealloc一定要调用,而且放在最后面
- [super dealloc];
- }@end int main(int argc, char const * argv[]) {
- // 1
- Person * p = [[Person alloc] init];
- NSUInteger c = [p retainCount];
- NSLog(@"计数器:%ld", c);
- // 2 retain方法返回的是对象本身
- [p retain];
- // 1
- [p release];
- // 0 野指针 :指向僵尸对象(不可用内存)的指针
- [p release];
- // -[Person setAge:] message sent to deallocated instance xxxxxx
- // 给已经释放的对象发送了一条-setAge:消息
- p.age = 10;
- //指针p变成空指针
- p = nil; //如果这一行不写会发生野指针错误,因为对象已经不可访问
- //EXC_BAD_ACCESS:访问一块坏的内存(已经被回收,不可用的内存)
- //野指针错误
- [p release]; [nil release]; //OC不存在空指针错误,不会报错,仅仅会报警告
- return 0;
- }
来源: http://lib.csdn.net/snippet/ios/42597