今天學習了一下內存管理方面的知識,正好看到了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因為沒有持有者就會被釋放。