声明按钮时,按钮的属性始终有两个选项:强和弱。它们之间有什么区别?另外,它是非原子的吗?例如:
@property (weak, nonatomic) IBOutlet UIButton *MyButton;
声明按钮时,按钮的属性始终有两个选项:强和弱。它们之间有什么区别?另外,它是非原子的吗?例如:
@property (weak, nonatomic) IBOutlet UIButton *MyButton;
这一切都来自http://clickflickboom.com/strong-vs-weak/ ...
定义属性时,您可以在(强)和(弱)之间进行选择。在这篇文章中,我将解释两者之间的区别。
强的
@property (strong) NSString *myString;
这是指针的默认状态,但为了清楚起见,我仍然喜欢明确声明 strong。只要分配它的类仍然存在,就会保留强指针。
虚弱的
@property (weak) NSString *myString;
弱引用意味着指针没有所有者,因此一旦不再需要它就会被释放(也就是说,没有其他东西指向它)。
最常见的是,您会为 IBOutlets 使用弱,例如 UITextFIeld、UILabels 和 UIButton 对象。这是一个例子:
在这种情况下,我正在为我的控制器视图中的按钮(theButton)创建一个 IBOutlet。theButton 对象属于我的视图,而不是我的控制器,因此在这种情况下,弱属性比强属性更有意义。事实上,作为一般规则,IBOutlets 应始终设置为弱。
请阅读这个:
从实际的角度来看,在 iOS 和 OS X 中的 outlet 应该被定义为声明的属性。出口通常应该是弱的,除了从文件所有者到 nib 文件中的顶级对象(或者,在 iOS 中,故事板场景)应该是强的。因此,您创建的 Outlets 通常默认情况下很弱,因为:
您为例如视图控制器的视图或窗口控制器的窗口的子视图创建的 Outlets 是对象之间的任意引用,并不暗示所有权。
强插座经常由框架类指定(例如,UIViewController 的视图插座,或 NSWindowController 的窗口插座)。
@property (weak) IBOutlet MyView *viewContainerSubview;
@property (strong) IBOutlet MyOtherClass *topLevelObject;