Objective c中强弱按钮的区别是什么?

时间:2014-03-03 02:40:56

标签: objective-c button memory-management nonatomic

声明按钮时,按钮的属性总是有两个选项:强和弱。他们之间有什么区别?还有,什么是非原子的?例如:

@property (weak, nonatomic) IBOutlet UIButton *MyButton;

2 个答案:

答案 0 :(得分:0)

请阅读:

Should IBOutlets be strong or weak under ARC?

从实际角度来看,在iOS和OS X中,出口应该被定义为声明的属性。 Outlets通常应该是弱的,除了那些从File的Owner到nib文件中的顶级对象(或者,在iOS中,故事板场景)应该很强。因此,默认情况下,您创建的出口通常较弱,因为:

  1. 您创建的出口,例如视图控制器视图或窗口控制器窗口的子视图,是不暗示所有权的对象之间的任意引用。

  2. 强大的出口通常由框架类指定(例如,UIViewController的视图出口或NSWindowController的窗口出口)。

    @property (weak) IBOutlet MyView *viewContainerSubview;
    @property (strong) IBOutlet MyOtherClass *topLevelObject;
    

答案 1 :(得分:-1)

http://clickflickboom.com/strong-vs-weak/ ...

得到这一切

在定义属性时,您可以选择(强)和(弱)。在这篇文章中,我将解释两者之间的区别。

@property (strong) NSString *myString;

这是指针的默认状态,但为了清晰起见,我仍然希望明确表示强。只要分配它的类仍然存在,就会保留一个强指针。

@property (weak) NSString *myString;

弱引用意味着指针没有所有者,因此一旦不再需要它就会被释放(也就是说,没有其他任何东西指向它)。

最常见的是,您将对IBOutlet使用weak,例如UITextFIeld,UILabels和UIButton对象。这是一个例子:

在这种情况下,我正在我的控制器视图中为按钮(theButton)创建一个IBOutlet。 theButton对象属于我的视图,而不是我的控制器,所以在这种情况下,弱属性比强大更有意义。事实上,作为一般规则,IBOutlets应始终设置为弱。