1. 程式人生 > >內存管理的思考模式

內存管理的思考模式

left urn retain 程序 即使 類別 tab 管理 turn

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

使用以下名稱開頭的方法名意味著自己生成的對象只有自己持有

  • 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使對象在超出指定的生存範圍時能夠自動並正確的釋放。

無法釋放非自己持有的對象

釋放非自己持有的對象會導致程序崩潰

內存管理的思考模式