標籤:
ARC(automatic reference counting)機制
判斷是否是ARC機制
在ARC下對象釋放的判斷依據: 對象沒有強指標指向
指標預設的都是強指標,比如我們建立的對象都是預設的強指標
Person *p1 = [[Person alloc] init];
__strong 修飾符,修飾這個指標是一個強指標,也可以不寫
__weak 修飾的這個指標是弱指標
ARC下的循環參考問題
當兩個對象互相擁有的時候,如果定義的時候都用strong,那麼就會導致循環參考的問題,雙方互相強指標指向,不能被釋放
解決這個問題的方法是:將其中一個以weak定義,就能完美解決這個問題了
ARC下set方法記憶體@property參數
ARC中的@property
strong:用於OC對象,相當於MRC中的retain
weak:用於OC對象,相當於MRC中的assign(代理一般用weak,UI控制項一般用weak)
assign:用於基礎資料型別 (Elementary Data Type),跟MRC中的assign一樣
copy:一般用於NSString,跟MRC中的copy一樣
ARC注意:
__weak Person *p=[[Person alloc] init];// 不合理,對象一建立出來就被釋放掉,對象釋 放掉後,ARC把指標設定為nil。
如何讓ARC的項目相容非ARC的類
讓程式相容ARC和非ARC部分
- 轉變為非ARC -fno-objc-arc
- 轉變為ARC的, -f-objc-arc
在哪裡添加編譯器標示 -fno-objc-arc如
將MRC轉化為ARC(不建議這麼使用,若要嘗試做好備份)
分類(Category)
分類的使用注意事項:
--------->在分類的聲明中不能聲明執行個體變數
--------->不能定義執行個體變數 也不能使用 @property
--------->在分類的方法中,可以訪問類中的執行個體變數
--------->在分類中存在和類同名的方法 優先訪問的時 分類中 的方法
當在多個類別中有同名的方法的時候,這時候,執行的最後編譯的那個類別的同名方法
分類的 > 原類
最後編譯的分類 > 其他的分類
分類(Category)非正式協議
非正式協議就是給NSObject類或Foundation架構中的子類建立的類目(分類),即給它們添加方法,叫做非正式協議
類的延展的概念
延展類別又稱為擴充(Extendsion)
Extension是Category的一個特例 其名字為匿名(為空白),並且新添加的方法一定要予以實現。(Category沒有這個限制)
// 這個一般用在.m檔案中,作為私人的方法和成員變數@interface Student (){ // 可以新增成員變數}// 添加方法@end
Objective-C知識總結(4)