ios基础之 ARC
ios ARC
1 什么是ARC
Automatic Reference Counting 自動引用計數(shù) 即ARC
顧名思義 系統(tǒng)自動的幫助我們?nèi)ビ嬎銓ο蟮囊糜嬎闫鞯闹?/p>
可以說是WDC 2011 和IOS
2 ARC 機制 下 對象何時被釋放
本質(zhì)
在程序使用ARC非常簡單,只需要想像往常一樣寫代碼
只不過永遠不要寫retain release autorelease 永遠不要手動的調(diào)用 dealloc 這三個關(guān)鍵字就好 這是ARC的最本質(zhì)的原則。
4 確認程序是否開啟ARC機制
1) 默認情況下 XCode 開啟ARC機制
2) ARC機制下,不允許調(diào)用retain release 和 releaseCount autorelease方法
3) 在dealloc 中不允許[super dealloc];
這兩種情況叫做沒有任何強指針指向?qū)ο?br /> 1 指向?qū)ο蟮乃袕娭羔槺换厥盏?br /> 2 指向?qū)ο蟮乃械膹娭羔樫x值為nil
ARC 機制
ARC機制下 釋放1個對象的標準是 沒有任何強指針指向?qū)ο蟮臅r候 ,對象就會被釋放
如果這個時候有弱指針指向,也會被釋放。
最重要1點 我們不能使用 1個弱指針來存儲創(chuàng)建一個新的對象
這樣的話 剛剛創(chuàng)建出來的對象,就沒有任何強指針指向,創(chuàng)建出來就會被回收。
int main(int argc,const char * argv[])
{
@autoreleasepool
{
__weak Person *p1 = [[Person alloc] init];//錯誤的寫法
}
return 0;
}
3) 在ARC機制下, 當對象被回收的時候,原來指向這個對象的弱指針會被自動設(shè)置為nil
這兩種情況叫做沒有任何強指針指向?qū)ο?br /> 1 指向?qū)ο蟮乃袕娭羔槺换厥盏?br /> 2 指向?qū)ο蟮乃械膹娭羔樫x值為nil
4 在ARC 機制下 @property 參數(shù)不能使用 retain
因為retain代表生成的setter 方法是MRC的標準的內(nèi)存管理代碼
而我們在ARC的機制下 不需要這些代碼
所以 在ARC的機制下 的setter 方法
什么都不需要做,直接賦值即可
6.當1個類的熟悉是一個OC對象 的時候,這個屬性 必須聲明為 強類型變量;
不寫__strong 默認是強類型指針。
如何控制@property 生成的私有屬性 是一個強類型還是弱類型的呢
@property(nonatomic,week)Car *car ;
@property(nonatomic,strong)Car *car ;
默認不寫, 就是strong類型
使用建議
在ARC機制下
如果屬性的是OC對象的類型是使用strong
在ARC機制下
如果屬性的不是OC對象的類型是使用assign
strong 和weak都是應(yīng)用在屬性的類型是OC對象的時候
,屬性的類型不是OC對象的時候就使用assign
基本類型使用assign
-----ARC
在ARC機制下 將MRC下的retain換位strong
在ARC 機制下 ,當兩個對象相互引用的時候 ,如果兩邊都使用strong 那么就會先內(nèi)存泄漏
解決方案 1 端使用strong 1端使用weak
1 開發(fā)程序分為ARC 和MRC
2 與多線程相關(guān)的參數(shù)
atomic 默認值 安全 但是效率低下
nonatomic 不安全 但是效率高
無論在ARC還是MRC都可以使用
使用建議 無論是ARC還是MRC都使用nonatomic
3 .retain 只能用在MRC模式下,代表生成的setter 方法是標準的內(nèi)存管理代碼
當屬性的類型是OC對象的,絕大多數(shù)的情況下使用retain 只有出行了循環(huán)的引用1邊retain 1邊assign
4 assign
在ARC 和MRC的模式下都可以使用assign
當屬性的類型是非OC對象的時候 使用assign
5 strong 只能使用下ARC機制下
當屬性的類型是OC對象的類型的使用,絕大多數(shù)使用strong
只有出現(xiàn)了循環(huán)引用的時候 1端使用strong 1 端 weak
weak
只能使用在ARC機制下 當屬性的類型是OC對象的時候
只有出現(xiàn)了循環(huán)引用的時候,1端strong 1端weak
readonly readwrite
. 無論是ARC 還是MRC 都可以使用
setter getter 無論是. 是ACR 還是MRC下都可以改
在ARC的機制下 原來使用retain的用strong
出現(xiàn)循環(huán)的引用的社時候,MRC 1邊 retain 1 邊 assign
ARC 下 1 邊 strong 1 邊 weak
1 有可能遇到的問題是
程序使用的是ARC機制開發(fā)的但是其中某一些類使用的MRC的
2 使用命令 -fno-objc-arc 對MRC寫的類添加如下命令
可以將整個MRC程序轉(zhuǎn)為ARC程序
總結(jié)
以上是生活随笔為你收集整理的ios基础之 ARC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发不是并行,它更好!
- 下一篇: Linux系统中解压缩指令汇总