參考:
1)http://ibloodline.com/articles/2016/04/01/uiview-weak-strong.html
2)http://www.reibang.com/p/5b8e1eafed39
1.知識點
如果IBOutlet對象是nib/storyboard scene的擁有者(File’s owner)所直接持有的對象睁枕,那么很顯然擁有者必須直接擁有對象的指針捐顷,因此屬性應(yīng)設(shè)置為strong。而其他的IBOutlet對象的屬性需要設(shè)置為weak前硫,因為擁有者并不需要直接擁有它們的指針。控制器需要直接控制某一個子視圖并且將子視圖添加到其他的view tree上去,此時需要strong动猬。
2.問答
1.IBOutlet屬性是Weak還是Strong?
1)我們將控件subview拖到xib/storyboard的view上表箭,view持有了subview(強引用)赁咙。
2)當(dāng)我們使用IBOutlet屬性控件的時候,我們是在viewController里面使用免钻,而這個IBOutlet屬性控件并不一定直接歸控制器所有彼水。當(dāng)他屬于VC的時候,我們要用Strong修飾符伯襟;當(dāng)他屬于View時猿涨,我們要用Weak修飾(避免View和VC同時擁有控件的強引用)。
即使使用Strong姆怪,也不會出現(xiàn)循環(huán)引用。在一般場景下,也不會發(fā)生內(nèi)存泄露稽揭。VC釋放的時候俺附,view也會被釋放,它們2個持有的subView也會被釋放溪掀。但是事镣,涉及到多層View的場景時,這么做是非常容易引起bug的揪胃。所以璃哟,請根據(jù)實際場景,確認IBOutlet屬性的修飾符喊递。
2.控件和IBOutlet的對應(yīng)關(guān)系是随闪?
1)一個控件可以對應(yīng)多個IBOutlet,所以他也可以對應(yīng)多個Action事件
場景:一個基類的xib中有一個通用性的控件骚勘,所有的子類中都有一個IBOutlet連接到該控件
2)一個IBOutlet只能對應(yīng)一個控件