2015-06-11 66 views
0

我聽說「Class Wrapper」這個術語很多,我很好奇它是什麼。我在這個網站上閱讀關於他們的解釋,他們基本上聽起來像一個Singleton和Objective-C。我的兩個問題是: 1.類包裝器中的單例有什麼區別? 2.是否在iOS項目中使用過類包裝,或者我們更經常在iOS世界中使用單例?類包裝器和Java和Objective-C中的單例之間有什麼區別?

+1

您需要認識到「Singleton」和「Class wrapper」是完全不同於語言的概念或設計模式。您可以將這些概念應用於任何面向對象的編程語言。它們都不是特定於Java或Objective-C的。 – rmaddy

+0

@rmaddy我以前不知道。你總是有見地的rmaddy,哈哈,謝謝你。 – John

回答

2

我認爲你對這些實體之一感到困惑,它們絲毫不相似(除了是軟件工程的一部分......)。

單例是一個單一的對象(你喜歡的任何類),可以通過你喜歡的任何代碼從整個項目的任何地方訪問。這是空間中的一個單點,可以從太空中的任何其他點進行參照。

「包裝類」是包裝另一個類(或原始類)的類。假設你想將一個int傳遞給一個函數或方法,該方法修改了這個int並且你希望調用對象看到這個改變。由於int是通過值而不是通過引用傳遞的(默認情況下),因此調用者會忽略對被調用函數中的int進行的任何更改。所以調用者看到int值沒有變化。現在,如果您創建一個Integer對象並使其包含一個int,則您現在可以通過引用函數或方法來傳遞該對象,修改Integer對象並將修改後的值返回到調用函數中。 A Wrapper Class將對象(或基元)包裝到另一個對象中以賦予其不同的功能。

+0

啊我明白了!謝謝。因此,基本上一個包裝類的例子就是將一個像int這樣的c原語存儲到NSInteger或NSNumber中,以提供更多的功能。這是一個非常有用的答案。非常感謝您的洞察! – John

+1

不用客氣約翰 – Alan

2

單件和類包裝是兩個不同的概念。單例是指只有一個實例的類,因此名稱。假設你想建立一個地址簿並在其中存儲多個聯繫人,那麼在你的應用中只有一個地址簿實例是有意義的,而不是創建多個地址簿,如果你的應用的目的僅僅是跟蹤一個聯繫人單個地址簿。

在Obj-C類包裝器中形成了橋接從C語言繼承的原始數據類型並具有對象表示的概念。你舉了一個float數據類型的例子。在數字的情況下,基礎框架提供了抽象的NSNumber類,用於圍繞原始數據類型(如float或int)進行「包裝」,併爲您提供對象表示。從那裏你可以將它們存儲在一個數組或字典中,或者將它們作爲普通對象來處理(發送消息,擴展等)。泛型類封裝的另一個很好的例子是NSValue類,它允許您創建用於在CG中廣泛使用的CGPoint或CGRect的對象表示。

相關問題