您的位置:首页 > 其它

内存管理的基本问题

2015-07-31 08:52 351 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: