首先有一點,在OC中,如果對象沒有強引用,就會被自動釋放,那么為什么控件還可以設為weak?
- 從storyboard或者xib上創建控件,在控件放在view上的時候,已經形成了如下的引用關系,以UIButton為例:
UIViewController->UIView->subView->UIButton
然后你為這個UIButton聲明一個weak屬性
@property(nonatomic, weak) IBOutlet UIButton *btn;
相當于xib/sb對這個Button是強引用,你聲明的屬性對它是弱引用。
2.手動創建控件
a). 將控件聲明成strong
@property(nonatomic, strong) UIButton *btn;
那么你在實現這個控件時只需這樣:
_btn = [[UIButton alloc] init];
[self.view addSubview:_btn]
b). 將控件聲明成weak
@property(nonatomic, weak) UIButton *btn;
那么你在實現這個控件時需要這樣:
UIButton *button = [[UIButton alloc] init];
_btn = button;
[self.view addSubview:_btn];
============================
最后給的建議是:
1.如果用Stroyboard/xib拖線,用weak
2.如果自定對象,用strong(但我還是習慣用weak暫時=_=)
3.根據個人習慣最好