2010-12-12 55 views
0

我對封裝有點困惑。一般來說(或者在Obj-C中),是否意味着接口/實現的分離,還是意味着通過方法訪問ivars?封裝在目標c中

請說明。謝謝。

+6

9個問​​題,沒有被接受的答案,沒有投票和似乎不願使用維基百科。這是怎麼回事? – Abizern 2010-12-12 18:33:16

回答

6

實際上,兩者都有。

由於nacho4d表示,您將類實例變量封裝在您的類中,並通過使用方法和屬性讀取和寫入它們的值來阻止對它們的直接訪問。這確保實例始終知道何時讀取或寫入了值,而直接ivar訪問與在C結構中設置值沒有區別。

然而,從@implementation分離@interface也對封裝有很大貢獻。過去幾年中語言的增強的一個目標是增加這種分離所提供的封裝程度。

即,類的主要@interface現在只能包含您希望其他開發人員/代碼與您交互的類的部分。公共界面,如果你願意。 所有的實現細節可以從最新編譯器中的@interface中移出,包括所有實例變量。

+0

這不完全正確; 32位OS X Cocoa,因此也是iPhone模擬器,仍然需要在頭文件中聲明所有實例變量,以便它們的順序是明確的。請參閱http://cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html – Tommy 2010-12-12 18:39:05

+1

使用最新的開發人員工具和64位ABI,我認爲確實可以在類中聲明實例變量擴展接口。有人糾正我,如果我錯了。 Yup; – 2010-12-12 18:45:18

+1

是的;並且在最新的iOS版本中,模擬器的運行時間(儘管是32位)與設備上的運行時間一樣工作! – bbum 2010-12-12 20:21:57

0

後者。從wikipedia

語言機制限制 訪問某些對象的 組件。

具體來說,在Objective-C中,默認情況下,ivar將受到保護,所以它們只能在相同的類或子類中進行訪問。可以根據需要將其更改爲@private或@public。

您提到的方法是訪問器(getter和setter),在這種情況下,您可能想要使用@properties,因爲它們可以在1行中定義,並且可以設置一些屬性,如retain,assign,copy,readonly等 繼續閱讀物業here (Apple doc)

0

隱藏類方法和變量從一類到另一類稱爲封裝。