強引用和弱引用( strong和

2021-07-08 10:51:30 字數 1158 閱讀 3332

初學者乾貨

在oc arc模式下開發:

id objca =[ [nsobject alloc] init];

預設宣告的乙個物件就為__strong強引用,等價於:

id __strong objca =[ [nsobject alloc] init];

注:在強引用中,有時會出現迴圈引用的情況,這時就需要弱引用(__weak)來幫忙 ,如本部落格裡面提到的block的迴圈引用(retain cycle)

* 強引用弱引用的區別?

1、強引用持有物件,弱引用不持有物件。

2、強引用可以釋放物件,但弱引用不可以,因為弱引用不持有物件,當弱引用指向乙個強引用所持有的物件時,當強引用將物件釋放掉後,弱引用會自動的被賦值為nil,即弱

引 用會自動的指向nil。

**示例:

intmain(intargc,constchar* argv)

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

}

return0;

}

輸出結果:

obja:

obja: (null)

分析:

因為objb生成的預設的為強引用(__strong),在超出if的作用域之後,objb所持有的物件被釋放,

obja為弱引用,所以obja不持有物件,在objb物件釋放後,obja自動的被賦值為nil

弱引用的特性是,不持有物件,即便是寫成id __weak objb = [[nsobject alloc] init];

此**系統會給與警告,因為這裡objb被宣告成弱引用,那麼在賦值之後,alloc出來的物件會被立即釋放。

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

我們在建立乙個新的物件時經常會這樣做 id obj1 nsobject alloc init 其實系統已經預設我們聲名的這個物件就是強引用型別的id strong obj1 nsobject alloc init 強引用會使物件的引用係數 1 這裡又牽扯到記憶體管理的一些相關問題,有不明白的可以先搜...

強引用和弱引用

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

弱引用和強引用

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