内存管理的思考模式

自己生成的对象,自己所持有

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

  • alloc
  • new
  • copy
  • mutableCopy

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

  • allocMyObject
  • newThisObject
  • copyThis
  • mutableCopyYourObject

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

  • allocate
  • newer
  • copying
  • mutableCopyed

非自己生成的对象,自己也能持有

/*

取得非自己生成并持有的对象

*/

id obj = [NSMutableArray array];

/*

取得的对象存在,但自己并不持有

*/

[obj retain]

/*

自己持有对象

*/

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

自己生成并持有对象,可通过一下方法实现

-(id)allocObject//要符合驼峰命名法

{

    id obj = [[NSObject alloc]init];

    return obj;

}

那么[NSMutableArray array]方法使取得的对象存在,但自己不持有对象,又是如何实现的呢

-(id)object{

    id obj = [[NSObject alloc]init];

    [obj autorelease];

    return obj;

}

autorelease使对象在超出指定的生存范围时能够自动并正确的释放。

无法释放非自己持有的对象

释放非自己持有的对象会导致程序崩溃

原文地址:https://www.cnblogs.com/lmg4819/p/8025288.html