强引用和弱引用 IBOutlet 的区别

7

strongweak 在 Xcode iOS 5.1 SDK 中的 IBOutlets 有何不同?

我之前使用的是 4.3 SDK,那里不存在 strong IBOutlets。此外,在 iOS 5.1 SDK 中也没有 (auto)release。


你不能比较 strong 和 nonatomic。我想你是指 strong 和 weak 的区别。你有尝试在 Apple 文档中阅读相关内容吗? - dasdom
@dasdom 好的,弱引用和强引用的区别对我很有帮助,还有相关文档链接。 - Dinesh
如果您禁用ARC,Autorelease和Release在iOS 5中可用。 ARC是一个可以启用或禁用的功能。 - borrrden
可能是Should IBOutlets be strong or weak under ARC?的重复问题。 - hypercrypt
3个回答

13

Strong表示只要属性指向一个对象,该对象就不会被自动释放。在非 ARC 环境下,它是 retain 的同义词。

指定与目标对象之间存在强引用关系。

Weak表示属性指向的对象可以被释放,但仅当它将属性设置为 NULL 时才能释放。在 ARC 中使用 weak 可以确保您不拥有它所指向的对象。

指定与目标对象之间存在弱引用关系。如果目标对象被释放,则属性值会自动设置为 nil。

Nonatomic 表示如果多个线程同时尝试读取或更改该属性,则可能会发生问题。后果是部分写入值或过度释放对象导致程序崩溃。

还可以查看苹果文档中的示例。

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

查看此链接以了解更多有关strongweak的信息。


弱点不是你所说的那样。 - X Slash

2
在ARC(自动引用计数)中,Strong告诉编译器属性和拥有者之间的关系是“强”的。它相当于autorelease池内存方案中的retain。苹果公司有一篇关于转换到ARC的文章在这里

0

你声明为strong的属性将拥有该对象,编译器会确保任何分配给此属性的对象。当我们将其设置为nil时,该属性将被销毁。

如果您不想控制生命周期,则可以将其声明为weak属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接