iOS 強引用( strong)和弱引用(

2021-07-10 08:53:26 字數 840 閱讀 1706

我們在建立乙個新的物件時經常會這樣做

id obj1 = [[nsobject alloc] init];
其實系統已經預設我們聲名的這個物件就是強引用型別的
id __strong obj1 = [[nsobject alloc] init];
強引用會使物件的引用係數+1(這裡又牽扯到記憶體管理的一些相關問題,有不明白的可以先搜一下記憶體管理的相關知識),只有當物件的引用計數為0時,物件才被銷毀。

弱引用型別的物件的生命週期不被是否由其他物件引用限制,它本該什麼時候銷毀就什麼時候被銷毀,它所持有的物件,不會使該物件的引用計數發生變化。即使它的引用沒斷,但是當它的生存週期到了時就會被銷毀,下面來段**更清晰

int main(int argc, const

char * argv)

nslog(@"obj0: %@", obj0);

}return

0;}

輸出的結果為

obj0: obj0: (null)

(上面的**是借鑑的)

如果把obj0的weak修飾去掉,那麼輸出結果就會變成

obj0:obj0:obj1物件預設的為強引用(__strong),它的作用域僅僅在if裡面,出了作用域,obj1所持有的物件就會被釋放掉。若obj0為弱引用,obj0不會持有物件,在obj1物件釋放後,obj0自動的被賦值為nil,但是如果obj0是強引用,就會使持有物件的引用係數增加,即使出了作用域,物件依然沒有被銷毀,因為obj0還持有乙份

強引用和弱引用( strong和

初學者乾貨 在oc arc模式下開發 id objca nsobject alloc init 預設宣告的乙個物件就為 strong強引用,等價於 id strong objca nsobject alloc init 注 在強引用中,有時會出現迴圈引用的情況,這時就需要弱引用 weak 來幫忙 如...

強引用和弱引用

weak 和 strong 會出現在宣告中 預設情況下,乙個指標都會使用 strong 屬性,表明這是乙個強引用。這意味著,只要引用存在,物件就不能被銷毀。這是一種所期望的行為 當所有 強 引用都去除時,物件才能被收集和釋放。不過,有時我們卻希望禁用這種行為 一些集合類不應該增加其元素的引用,因為這...

弱引用和強引用

如果目標檔案對外部目標檔案符號進行強引用,但在鏈結成可執行檔案時不能被正確的決議 好奇怪的名稱,看看p 51 鏈結器就會報錯,這是對於強引用 strong reference 而言的。與之相對應還有一種弱引用 weak reference 在處理弱引用時,如果該符號有定義,則鏈結器將對該符號的引用進...