Objective-C知識總結(4)


ARC(automatic reference counting)機制

判斷是否是ARC機制

  • ARC機制中不能使用retain release autorelease retainCount
  • 在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部分

  • 轉變為非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

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: