Objective-C 內存管理2
手動內存管理(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:原子性操作 線程安全 效率低 只有多線程訪問數據的時候才有可能會使用此關鍵字
所有的基本數據類型用assign或weak但是因為是默認的 所以什麼都不用寫
所有的對象類型(除了NSString)都用 strong或retain
NSString需要用copy來修飾,為了避免連鎖反應 改變了某一個字符串 導致一系列相關字符串發生改變