初學者乾貨
在oc arc模式下開發:
id objca =[ [nsobject alloc] init];
預設宣告的乙個物件就為__strong強引用,等價於:
id __strong objca =[ [nsobject alloc] init];
注:在強引用中,有時會出現迴圈引用的情況,這時就需要弱引用(__weak)來幫忙 ,如本部落格裡面提到的block的迴圈引用(retain cycle)
* 強引用弱引用的區別?
1、強引用持有物件,弱引用不持有物件。
2、強引用可以釋放物件,但弱引用不可以,因為弱引用不持有物件,當弱引用指向乙個強引用所持有的物件時,當強引用將物件釋放掉後,弱引用會自動的被賦值為nil,即弱
引 用會自動的指向nil。
**示例:
int
main(
int
argc,
const
char
* argv)
nslog(@
"obja: %@"
, obja);
}
return
0;
}
輸出結果:
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 在處理弱引用時,如果該符號有定義,則鏈結器將對該符號的引用進...