ARC(automatic reference counting)機制
判斷是否是ARC機制
在dealloc方法中不能使用 [super dealloc];
在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:用于基本數據類型,跟MRC中的assign一樣
copy:一般用于NSString,跟MRC中的copy一樣
ARC注意:
__weak Person *p=[[Person alloc] init];// 不合理,對象一創建出來就被釋放掉,對象釋 放掉后,ARC把指針設置為nil。
如何讓ARC的項目兼容非ARC的類
讓程序兼容ARC和非ARC部分
在哪里添加編譯器標示 -fno-objc-arc如下圖
將MRC轉化為ARC(不建議這么使用,若要嘗試做好備份)
分類(Category)
分類的使用注意事項:
--------->在分類的聲明中不能聲明實例變量
--------->不能定義實例變量 也不能使用 @property
--------->在分類的方法中,可以訪問類中的實例變量
--------->在分類中存在和類同名的方法 優先訪問的時 分類中 的方法
當在多個類別中有同名的方法的時候,這時候,執行的最后編譯的那個類別的同名方法
分類的 > 原類
最后編譯的分類 > 其他的分類
分類(Category)非正式協議
非正式協議就是給NSObject類或Foundation框架中的子類創建的類目(分類),即給它們添加方法,叫做非正式協議
類的延展的概念
延展類別又稱為擴展(Extendsion)
Extension是Category的一個特例 其名字為匿名(為空),并且新添加的方法一定要予以實現。(Category沒有這個限制)
// 這個一般用在.m文件中,作為私有的方法和成員變量@interface Student (){ // 可以添加成員變量}// 添加方法@end
新聞熱點
疑難解答