__Strong和__weak的區別

今天學習了一下內存管理方面的知識,正好看到了strong和weak的區別,小小心得,分享一下。

strong:

強引用,舉個例子:

id __strong test0 = [[NSObject alloc] init]; /* 設為對象A*/

id __strong test1 = [[NSObject alloc] init];/*設為對象B*/

test0 和 test1 都是強引用,test0是對象A的持有者,就是擁有A,test1是對象B的持有者,就是擁有對象B,若:

test1 = test0;/*對象A的持有者就變成了test1*/

這樣對象B就沒有了持有者,沒有持有者的對象會被ARC回收,就是釋放,這樣:

test1持有對象A,test0也持有對象A。

而weak呢,主要作用是用來防治循環引用出現內存泄漏的問題,它主要是弱引用,弱引用就是不持有對象,只是指向這個對象,舉個例子:

id __strong test0 = [[NSObject alloc] init]; /* 設為對象A*/

id __strong test1 = [[NSObject alloc] init];/*設為對象B*/

id __weak test2 = test0;/*test1持有對象A的弱引用*/

test0持有對象A的強引用,而test2持有對象A的弱引用,也就是說,test0還是持有A的,而test2弱引用了test0的對象A,并沒有持有對象A,當test2離開了作用域,對對象A的引用就會失去,當對象A被釋放掉之后,test2會被置為nil,并不會出現crash。若:

test1 = test0;/*test1強引用對象A*/

此時對象B因為沒有持有者就會被釋放。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容