为什么 iOS 开发中,xib跟storyboard拖得控件一般为 weak 而不是 strong

首先有一点,在OC中,如果对象没有强引用,就会被自动释放,那么为什么控件还可以设为weak?

  1. 从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.根据个人习惯最好

你可能感兴趣的:(为什么 iOS 开发中,xib跟storyboard拖得控件一般为 weak 而不是 strong)