iOS内存管理总结

1、理解引用计数

对象的生命周期以下:函数

一、生成并本身持有对象 引用计数+1 code

使用alloc、new、copy、mutableCopy名称开头的方法,意味着本身生成的对象本身也持有。orm

但不是绝对的,以下对象

NSObject *object= [NSObject new];//retainCount=1

NSArray *object= [NSArray new];//retainCount=-1

二、持有对象(retain) 引用计数+1生命周期

三、释放对象(release) 引用计数-1it

四、废弃对象 (alloc)table

上面的描述用代码表示就清楚了,以下:test

NSObject*object = [NSObject new];//1

[object retain];//2

NSLog(@"%d ", object.retainCount);

[object release];//1

NSLog(@"%d ", object.retainCount);

[object release];// 0

//[object release];

2、自动释放池

对象持有引用计数+1,释放引用计数-1,当引用计数=0时,对象释放。貌似很简单,一两句话就能够归纳清楚。可是当多个实体拥有某个对象时,对象的全部权就变得复杂了。object

- (NSString*)myString
    {
        NSString *str = [[NSString alloc] initWithFormat:@"test"];
        [str retain];
        return str;
    }

像这种状况,究竟谁释放?
若是在myString里面释放。那么myString函数外面就无法使用对象了,由于已经被释放了。
那如何是函数外面释放,意味着调用者要负责处理。这样一来,有点不方便。
因此这时候应该用自动释放(autorelease)来释放对象:引用

- (NSString*)myString
{
    NSString *str = [[NSString alloc] initWithFormat:@"test"];
    [str autorelease];
    return str;
}
相关文章
相关标签/搜索