日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios基础之 ARC

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios基础之 ARC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ios ARC

1 什么是ARC

Automatic Reference Counting 自動引用計數 即ARC

顧名思義 系統自動的幫助我們去計算對象的引用計算器的值

可以說是WDC 2011 和IOS

2 ARC 機制 下 對象何時被釋放

本質

在程序使用ARC非常簡單,只需要想像往常一樣寫代碼
只不過永遠不要寫retain release autorelease 永遠不要手動的調用 dealloc 這三個關鍵字就好 這是ARC的最本質的原則。

4 確認程序是否開啟ARC機制
1) 默認情況下 XCode 開啟ARC機制

2) ARC機制下,不允許調用retain release 和 releaseCount autorelease方法
3) 在dealloc 中不允許[super dealloc];

這兩種情況叫做沒有任何強指針指向對象
1 指向對象的所有強指針被回收掉
2 指向對象的所有的強指針賦值為nil

ARC 機制
ARC機制下 釋放1個對象的標準是 沒有任何強指針指向對象的時候 ,對象就會被釋放
如果這個時候有弱指針指向,也會被釋放。

最重要1點 我們不能使用 1個弱指針來存儲創建一個新的對象
這樣的話 剛剛創建出來的對象,就沒有任何強指針指向,創建出來就會被回收。
int main(int argc,const char * argv[])
{
@autoreleasepool
{
__weak Person *p1 = [[Person alloc] init];//錯誤的寫法
}
return 0;
}

3) 在ARC機制下, 當對象被回收的時候,原來指向這個對象的弱指針會被自動設置為nil

這兩種情況叫做沒有任何強指針指向對象
1 指向對象的所有強指針被回收掉
2 指向對象的所有的強指針賦值為nil

4 在ARC 機制下 @property 參數不能使用 retain
因為retain代表生成的setter 方法是MRC的標準的內存管理代碼

而我們在ARC的機制下 不需要這些代碼

所以 在ARC的機制下 的setter 方法
什么都不需要做,直接賦值即可

  • ARC機制下我們關注的重點是
    6.當1個類的熟悉是一個OC對象 的時候,這個屬性 必須聲明為 強類型變量;
  • 不寫__strong 默認是強類型指針。

    如何控制@property 生成的私有屬性 是一個強類型還是弱類型的呢

    @property(nonatomic,week)Car *car ;
    @property(nonatomic,strong)Car *car ;

    默認不寫, 就是strong類型

    使用建議
    在ARC機制下
    如果屬性的是OC對象的類型是使用strong
    在ARC機制下
    如果屬性的不是OC對象的類型是使用assign
    strong 和weak都是應用在屬性的類型是OC對象的時候
    ,屬性的類型不是OC對象的時候就使用assign
    基本類型使用assign

    -----ARC
    在ARC機制下 將MRC下的retain換位strong

    在ARC 機制下 ,當兩個對象相互引用的時候 ,如果兩邊都使用strong 那么就會先內存泄漏

    解決方案 1 端使用strong 1端使用weak

    1 開發程序分為ARC 和MRC

    2 與多線程相關的參數
    atomic 默認值 安全 但是效率低下
    nonatomic 不安全 但是效率高

    無論在ARC還是MRC都可以使用
    使用建議 無論是ARC還是MRC都使用nonatomic

    3 .retain 只能用在MRC模式下,代表生成的setter 方法是標準的內存管理代碼
    當屬性的類型是OC對象的,絕大多數的情況下使用retain 只有出行了循環的引用1邊retain 1邊assign

    4 assign
    在ARC 和MRC的模式下都可以使用assign
    當屬性的類型是非OC對象的時候 使用assign

    5 strong 只能使用下ARC機制下
    當屬性的類型是OC對象的類型的使用,絕大多數使用strong
    只有出現了循環引用的時候 1端使用strong 1 端 weak

  • weak
    只能使用在ARC機制下 當屬性的類型是OC對象的時候
    只有出現了循環引用的時候,1端strong 1端weak

  • readonly readwrite
    . 無論是ARC 還是MRC 都可以使用

  • setter getter 無論是. 是ACR 還是MRC下都可以改


  • 在ARC的機制下 原來使用retain的用strong
    出現循環的引用的社時候,MRC 1邊 retain 1 邊 assign
    ARC 下 1 邊 strong 1 邊 weak

    1 有可能遇到的問題是
    程序使用的是ARC機制開發的但是其中某一些類使用的MRC的

    2 使用命令 -fno-objc-arc 對MRC寫的類添加如下命令

    可以將整個MRC程序轉為ARC程序

    總結

    以上是生活随笔為你收集整理的ios基础之 ARC的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。