内存管理的基本问题

来源:互联网 发布:github php-cs-fixer 编辑:程序博客网 时间:2024/05/18 02:57
#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 {

    [superdealloc];

    NSLog(@"Person被销毁了");

}

@end



0 0