iOS下面的情况有什么区别?

时间:2015-11-14 13:35:40

标签: ios properties

我认为在我的视图中有两种方法可以添加UIControl

状态1:

@property (nonatomic,weak) UIButton *button;

- (void)viewDidload
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button........ (set frame,color,text........)
    [self.view addSubView:button];
    _button = button;
}

状态2。

@property (nonatomic,strong) UIButton *button;

- (void)viewDidload
{
    _button = [UIButton buttonWithType:UIButtonTypeCustom];
    _button.......(set frame,color,text......)
    [self.view addSubView:_button];
}

我想知道它们之间的差异以及在不同情况下我应该选择什么?

2 个答案:

答案 0 :(得分:1)

在版本1(非原子,强)中,viewcontroller保留对该按钮的强引用。这意味着如果您将其从代码中的某个位置([self.button removeFromSuperview];)中的superview中删除,它仍然在内存中,并且可以在以后的某个时间点([self.view addSubview:self.button];)进行读取。

在版本2(非原子,弱)中,viewcontroller保留对该按钮的弱引用。这意味着,如果您将代码中的某个位置的超级视图中删除它(并且您的应用程序的其他任何部分都没有对其进行强引用),则会将其取消分配。

创建局部变量UIButton *button = ...并将其分配给实例变量_button = button;或直接使用实例变量_button = [UIButton buttonWithType:...之间没有真正的区别。

答案 1 :(得分:0)

状态1中的

您已将UIButton标记为弱属性 弱引用意味着指针没有所有者,因此一旦不再需要它就会被释放(也就是说,没有任何东西指向它)。

但状态2:

您已将UIButton标记为强属性,当您的Button未标记为IBOutlet时,您应该使用强大的