內存管理的思考模式
阿新 • • 發佈:2017-12-12
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使對象在超出指定的生存範圍時能夠自動並正確的釋放。
無法釋放非自己持有的對象
釋放非自己持有的對象會導致程序崩潰
內存管理的思考模式