Chapter1:自动引用计数

1.内存管理/应用计数

1.2.1内存管理的思考方式

  • 自己生成的对象,自己所持有。
  • 非自己生成的对象,自己也能持有。
  • 不再需要自己持有的对象时释放。
  • 非自己持有的对象无法释放。

自己生成的对象,自己所持有
使用一下名称 开头 的方法名意味着自己生成的对象只有自己持有:

  • alloc
  • new
  • copy
  • mutableCopy
  • allocnew
id obj = [[NSObject alloc] init];
id obj = [NSObject new];

以上两者完全一致,指向生成并持有对象的指针被赋给变量obj

  • copymutableCopy
    copy方法利用基于NSCopying方法约定,由各类实现的copyWithZone:方法生成并持有对象的副本。与copy方法类似,mutableCopy方法利用基于NSMutableCopying方法约定,由各类实现的mutableCopyWithZone:方法生成并持有对象的副本。

下列名称也意味着自己生成并持有对象:

  • allocMyObject
  • newThatObject
  • copyThis
  • mutableCopyYourObject

但是对于一下名称,即使使用alloc/new/copy/mutableCopy 名称开头,并不属于统一类别的方法:

  • allocate
  • newer
  • copying
  • mutableCopyed

非自己生成的对象,自己也能持有
用alloc/new/copy/mutableCopy 以外的方法取得的对象,因为非自己生成并持有,所以自己不是该对象的持有者。

id obj = [NSMutableArray array];

NSMutableArray类对象被赋给变量obj,但变量obj自己并不持有该对象。使用retain方法可以持有对象。

id obj = [NSMutableArray array];
[obj retain];

不再需要自己持有的对象时释放
非自己持有的对象无法释放

2.

3.

你可能感兴趣的:(Chapter1:自动引用计数)