2

声明按钮时,按钮的属性始终有两个选项:强和弱。它们之间有什么区别?另外,它是非原子的吗?例如:

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

2 回答 2

0

这一切都来自http://clickflickboom.com/strong-vs-weak/ ...

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

强的

@property (strong) NSString *myString;

这是指针的默认状态,但为了清楚起见,我仍然喜欢明确声明 strong。只要分配它的类仍然存在,就会保留强指针。

虚弱的

@property (weak) NSString *myString;

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

最常见的是,您会为 IBOutlets 使用弱,例如 UITextFIeld、UILabels 和 UIButton 对象。这是一个例子:

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

于 2014-03-03T02:44:45.370 回答
0

请阅读这个:

在 ARC 下,IBOutlets 应该强还是弱?

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

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

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

    @property (weak) IBOutlet MyView *viewContainerSubview;
    @property (strong) IBOutlet MyOtherClass *topLevelObject;
    
于 2014-03-03T03:01:03.800 回答