2012-12-21 54 views
1

最近我一直在閱讀有關聚合和合成的內容,以及合成如何基本上是一種有 - 一種關係,而聚合則不是。聚合似乎更像是一個熟人。我瞭解你,但我不擁有你。Objecitive-C:是用於決定強/弱參考的聚合/合成

與此同時,我一直在學習Objective-C內存管理以及強和弱關鍵字。創建對象會擁有新的變量,並且它不會。

那麼,我可以得出結論:強和弱直接用於確定一個變量是否將成爲一個複合變量或聚合變量?

感謝

+4

沒有 - 強和弱的引用特別與內存管理有關。組合和聚合是更一般的設計概念。 – antlersoft

+0

難道這是一種實現這些設計決策的方式嗎? – Oscar

+0

我認爲你在這個正確的軌道上。我一直在閱讀這些概念,並且Objective-C強/弱屬性params是首先想到的。弱=聚合,強=複合。我同意antlersoft的觀點,他們是更抽象的OOP概念,然而他們以強/弱的形式表現在Objective-C中。 – i2097i

回答

1

強弱被用於確定如果一個變量 將是一個複合或聚集變量?

恰恰相反。看看實現,你可以得到設計的線索,但設計決定了實現,因爲它是一個更高層次的概念。

聚合和組合兩種包含關係:

  • 聚合是一個關係部分組成,而部分可以獨立地存在。也就是說,它們的存在與容器的壽命沒有關係,因此您使用不暗示所有權的弱引用來指代這些部分。

  • 成分是has-a或owns-a的關係,因此您使用強參考意味着所有權。一旦容器被銷燬,零件也會被銷燬。

弱和強是用於內存管理ARC的所有權限定符:

  • 分和保留的對象。它意味着所有權,因爲只要強指針存在,對象就不會被釋放。
  • 分但不保留一個對象。它並不意味着所有權,因爲它不會影響對象的生命(這取決於其他地方是否存在強有力的參考)。