#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person * p = [[Person alloc] init];
NSLog(@"%lu",p.retainCount);
// retain :retainCount + 1,返回 self
[p retain];
NSLog(@"%lu",p.retainCount);
// release: retainCount - 1
[p release];
// 1
NSLog(@"%lu",p.retainCount);
//[p release];
// retainCount = 0 的时候 会调用 dealloc 方法销毁对象
// EXC_BAD_ACCESS 系统访问了内存中不可访问的空间
// OC 中默认不进行实时监测
NSLog(@"%lu",p.retainCount);
/*
那为什么在这个对象被回收之后,这个不确定的值是1而不是0呢?这是因为当最后一次执行release时,系统知道马上就要回收内存了,就没有必要再将retainCount减1了,因为不管减不减1,该对象都肯定会被回收,而对象被回收后,它的所有的内存区域,包括retainCount值也变得没有意义。不将这个值从1变成0,可以减少一次内存操作,加速对象的回收。*/
}
return 0;
}
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
#import "Person.h"
@implementation Person
- (void)dealloc {
[super dealloc];
NSLog(@"Person 被销毁了");
}
@end