ARC 記憶體管理見解

2021-06-21 06:00:41 字數 1703 閱讀 7545

arc就是自動引用計數,在arc之前,我們都是通過手動管理引用計數的,也就是手動使用release和retain來是引用計數減1或者加1,arc其實還是使用release和retain,只不過系統幫你完成而成。

clang語1言擴充套件很有強的類函式巨集,可以使用以下**宣告編譯時支援arc而檔案**不支援arc

#if !__has__feature(objc_arc)

- (void)release

#endif

在非arc語arc**轉換時,可以使用xcode的convert object_c arc工具,-fno-objc-arc宣告不支援arc

arc -f-objc-arc宣告支援arc

所有權修飾符:

__strong:變數和屬性都可以修飾,是預設修飾符,引用計數加1,持有保留物件

__unsafe_unretained:保留物件的引用,引用計數不加1,無持有物件時就會被釋放,相當於非arc中的assign

_weak:與_unsafe_unretained效果相似,不過weak有歸零,最後置為nil,_unsafe_unretained不為nil

_auto_releaing:用於返回乙個自動釋放變數 nserror使用 ,最大的區別是不能宣告屬性

arc會將未初始化的變數預設為空值,但是不會將標量的值置為零,如int a,b

自由橋接:在oc中使用標準c和core foundation時是不會遵循arc的,因此在使用c語言是需要進行橋接

__bridge:告訴arc不要增加引用計數也不要更改所有權 

__bridge_retained:轉換c指標並且引用計數增加 使用過nsretuens_retained 就需要這個修飾符

__bridge_transfer: 用於轉換core foundation指標型別,並且引用計數增加

arc注意事項:

1迴圈保留 主要發生在**與控制器的相互強引用 ,解決之道就是宣告**為weak或者unsafe_unretained 標記為弱引用引用計數不增加,就不會形成迴圈引用而洩露

2 在arc中會改變_block的語義 arc中_block引用會被保留而不複製意味著會發生迴圈保留 正確的處理時使用_weak或者_unsafe_unretained引用

__weak id safeself = self;

self.block = ^(nssring * returnedstring)

iOS記憶體管理 ARC

arc是在編譯的時候插入 來確信讓物件能夠按需要來存在。arc同樣是以引用計數為基礎。你可以選擇在以檔案或者專案為單位不使用arc。但是建議盡量最好使用arc,首先,編譯器為你做記憶體管理往往比你自己要更優秀,其次,arc導致的效率損失在ui面前基本可以忽略不計。arc有以下強制規則 1.你不能顯示...

ARC 記憶體管理解惑

自動引用計數 arc 是乙個編譯器特性,它提供了自動的objective c物件的記憶體管理。arc是通過在編譯時新增 來確保oc物件只在需要的時候存在。從概念上講,它新增適當的記憶體管理呼叫,並且遵循手動引用計數的記憶體管理規範。因此,在使用arc時,不用關心什麼時候使用retain,releas...

OC記憶體管理之ARC

除了特殊場合,使用arc是大勢所趨。因為這不僅能夠提高程式設計師的開發效率,讓程式設計師把精力專注在功能實現上,也大大節約了專案的開發成本,更提高了程式的可維護性。1.使用arc的重要關注點就是 物件是否有強指標指向,沒有強指標指向的物件會被系統自動 2.property關鍵字 強指標用strong...