很多初學者都會困惑說到底property什麼時候要設定strong/weak,這篇文章簡單就官方文章內容(或stackoverflow的文章)作點結論,主要討論的是,IBOutlet的property到底要怎麼設定?strong or weak?
簡單來說,file Owner所擁有的頂端物件都是strong,較底層的都是weak。這意思是說,nib裡面,file owner底下可能是很多不同的UIView的物件一層一層建立起來,最上層的,就是所有的UIView/UIControl的parent的物件,是file owner直接擁有的。
比方說,UIViewController裡面的view屬性,就是直接擁有的最頂端的物件,或是UITableViewCell的contentView也是最頂端的物件,這樣的物件產生的IBOutlet,為了彰顯該物件和file owner之間是有直接的所有權關係(parent-child)的,就在file owner的類別標頭檔內宣告的property為strong。
但是,如果說是UITableViewCell的contentView裡面放的一個Button或是label,他是contentView這個UIView所擁有而非file owner直接的child物件(祖孫關係:file owner - contentView - label or button),如果還是設定成strong,可能會有retain cycle的問題,所以要設定成weak,表示沒有直接所有權的特性。
簡單來說,file Owner所擁有的頂端物件都是strong,較底層的都是weak。這意思是說,nib裡面,file owner底下可能是很多不同的UIView的物件一層一層建立起來,最上層的,就是所有的UIView/UIControl的parent的物件,是file owner直接擁有的。
比方說,UIViewController裡面的view屬性,就是直接擁有的最頂端的物件,或是UITableViewCell的contentView也是最頂端的物件,這樣的物件產生的IBOutlet,為了彰顯該物件和file owner之間是有直接的所有權關係(parent-child)的,就在file owner的類別標頭檔內宣告的property為strong。
但是,如果說是UITableViewCell的contentView裡面放的一個Button或是label,他是contentView這個UIView所擁有而非file owner直接的child物件(祖孫關係:file owner - contentView - label or button),如果還是設定成strong,可能會有retain cycle的問題,所以要設定成weak,表示沒有直接所有權的特性。
留言
張貼留言