標籤:ios 劉國斌 藍懿教育 objective—c
手動記憶體管理(MRC)中常用的三個方法
retain:導致記憶體計數+1
release:導致記憶體計數-1
copy:複製出來一個新的對象 和之前對象的資料可能一致 但是 不是同一個對象 此對象記憶體計數是1
autorelease:自動釋放 當變數出了自動釋放池之後會自動釋放
自動釋放池在項目中有很多看不見的
屬性描述關鍵字:
retain/strong:
//如果是retain 會做兩件事
//-(void)setNames:(NSMutableArray *)names{
// //第一件事把原來的release -1
// [_names release];
//// 第二件事把新傳遞進來的retain +1
// _names = [names retain];
//
//
//}
屬性生命時retain加的1 會在當前對象銷毀時 執行dealloc方法的時候 執行release -1
assign/weak:
//如果是assign或weak set方法中只做了一件事
//-(void)setAge:(int)age{
//
// _age = age;
//
//}
copy:
//如果是copy set方法中做一件事
//-(void)setNames:(NSMutableArray *)names{
//
// _names = [names copy];
//}
readonly:如果用readonly修飾 會使屬性只產生get方法 沒有set方法
nonatomic:非原子性操作 不安全 效率高 非多線程都用nonatomic
atomic:原子性操作 安全執行緒 效率低 只有多線程訪問資料的時候才有可能會使用此關鍵字
所有的基礎資料型別 (Elementary Data Type)用assign或weak但是因為是預設的 所以什麼都不用寫
所有的物件類型(除了NSString)都用 strong或retain
NSString需要用copy來修飾,為了避免連鎖反應 改變了某一個字串 導致一系列相關字串發生改變
本文出自 “Get” 部落格,請務必保留此出處http://3517465.blog.51cto.com/3507465/1692010
Objective-C 記憶體管理2 藍懿教育