strong與weak是由ARC新引入的對象變量屬性
ARC引入了新的對象的新生命周期限定,即零弱引用。如果零弱引用指向的對象被deallocated的話,零弱引用的對象會被自動設置為nil。
@property(strong) MyClass *myObject;
相當於@property(retain) MyClass *myObject;
@property(weak) MyOtherClass *delegate;
相當於@property(assign) MyOtherClass *delegate;
強引用與弱引用的廣義區別:
強引用也就是我們通常所講的引用,其存亡直接決定了所指對象的存亡。如果不存在指向一個對象的引用,並且此對象不再顯示列表中,則此對象會被從內存中釋放。
弱引用除了不決定對象的存亡外,其他與強引用相同。即使一個對象被持有無數個若引用,只要沒有強引用指向他,那麽其還是會被清除。沒辦法,還是 “強哥” 有面子。
簡單講strong等同retain
weak比assign多了一個功能,當對象消失后自動把指針變成nil,好處不言而喻。
__weak, __strong 用來修飾變量,此外還有 __unsafe_unretained, __autoreleasing 都是用來修飾變量的。
__strong 是缺省的關鍵詞。
__weak 聲明了一個可以自動 nil 化的弱引用。
__unsafe_unretained 聲明一個弱應用,但是不會自動nil化,也就是說,如果所指向的內存區域被釋放了,這個指針就是一個野指針了。
__autoreleasing 用來修飾一個函數的參數,這個參數會在函數返回的時候被自動釋放。
http://blog.csdn.net/favormm/article/details/7023322