是否正确,strong
属性引用了对象组合,weak
属性引用了对象聚合,UML notation?
答案 0 :(得分:1)
有趣的问题。
我会说他们相似但不同。
在Objective-C中,弱引用的存在理由通常被描述为手动打破本来是保留周期的一种方式 - 这是必需的,因为ARC没有(至少目前)支持收集这样的周期。这实际上并不是聚合的用途。
您还会看到它们用于通知,其中一个对象将向另一个对象发送通知,只要后者存在即可。这可能被视为更接近聚合,但实际上是“如果目标存在则做某事”而不是“如果我死了就不杀死目标”。
您当然可以使用Obj-C中的弱引用来实现聚合,但您可能无法获得预期的行为。
考虑参考文献中的C ++示例:
class Professor;
class Department
{
...
private:
// Aggregation
Professor* members[5];
...
};
在Objective-C中可能是:
@interface Department
@property (weak) NSArray *members;
...
@end
当C ++对象被破坏时,数组也会被破坏,但数组的元素却不会被破坏。但是在Objective-C中,数组也没有被销毁 - NSArray
始终保持对其成员的强引用,因此它们保持不变。您当然可以为Objective-C设计弱集合。
答案 1 :(得分:1)
我认为它与组合和聚合之间的差异没有任何关系,因为它们都用于两种情况。
您的链接中的示例:
strong
提到了Carburetor。weak
引用了Car。strong
引用了一系列Ducks。strong
对每个包含Duck的引用。weak
提到了池塘。在这两种情况下,都有strong
引用的所有者和拥有weak
反向引用的对象。
所以我想说strong
和weak
是表示组合或聚合的UML连接线的两个端点。