是否正确,strong
属性是指对象组合,而weak
属性是指对象聚合,根据UML notation?ARC宣布的属性属性 - 了解
1
A
回答
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
我不认为它与组成和聚合之间的差异没有任何关系,因为它们都用于这两种情况。从你的链接
例子:
- 在一到一个案例:
- 车有
strong
参考化油器。 - 化油器有
weak
参考汽车。
- 车有
- 在一个对多的情况下:
- 池具有
strong
参照鸭子的阵列。 - 该数组包含
strong
对每个包含的Duck的引用。 - 鸭子有
weak
参考池塘。
- 池具有
在这两种情况下,有业主与strong
参考,并weak
反向引用拥有的对象。
所以我会说strong
和weak
是表示组合或聚合的UML连接线的两个端点。
相关问题
- 1. ARC属性的新属性
- 2. 当应uiviewcontrollers被宣布为属性
- 3. 了解Android布局中的xmlns属性
- 4. 了解http发布请求的属性
- 5. 了解jsfc属性
- 6. 了解flex属性
- 7. ARC和nill属性
- 8. 了解MATLAB类的属性
- 9. 了解svg的viewbox属性
- 10. 了解树木的属性
- 11. 了解Android的VectorDrawable属性
- 12. 了解边境的属性
- 13. ARC和弱IBOutlet属性
- 14. 了解python类属性
- 15. 了解ownerdrawn listbox + OwnerDrawVariable属性
- 16. 了解backbone.js属性和toJSON()
- 17. 了解glXCreateContextAttribsARB属性设置
- 18. 解析INTS了XML属性
- 19. 了解CSS浮动属性
- 20. Vue2了解:class属性
- 21. Monotouch:了解基础属性
- 22. 是否需要使用ARC的UIView属性的retain属性?
- 23. CSS的margin-top属性只有在边境被宣布
- 24. Swift如何在属性属性中实现ARC?
- 25. 与布尔属性
- 26. 使用ARC的Objective-C属性
- 27. 了解NSFetchedResultsController的瞬态属性
- 28. 了解可信度的CSS属性
- 29. 试图了解gradle项目的属性
- 30. 了解JQuery的筛选器属性
将数组属性声明为'weak'不是个好主意。一旦你在那里分配了一个'NSArray'实例,并且你没有把它存储在其他地方,你就会失去它,并且可能会丢失所有包含的对象。 – Tricertops
此外,基金会也有弱收藏。 'NSHashTable'和'NSMapTable'是'NSMutableSet'和'NSMutableDictionary'的弱等价物。但是你仍然需要“强烈的”引用来让它们活着。 – Tricertops
有很好的理由使用'weak' ..但是所有由'weak'属性槽引用的对象都必须在程序的其他地方有一个'strong'引用。 – nielsbot