這僅僅是一個封裝你可以有許多不同的層面的私有化的事情......
最初在Objective-C運行時不支持在運行時的對象添加實際的領域,所以每伊瓦爾曾在課堂上列出:
@interface MyClass : NSObject
{
//every ivar that MyClass adds to NSObject must be here
}
這是一個簡單的和足夠好的系統,一會兒......
甚至私人的ivars不得不宣佈,雖然編譯器不會讓你訪問他們錯了範圍。
@interface MyClass : NSObject
{
@private
id someObj;
}
這種可見性說明符的機會有限,如:
//someotherclass.m
+ (void)doSomething
{
MyCLass * mc = [MyClass new];
mc->someObj = [SomeOtherClass new]; // error cant access private variable...
}
,但你可能會得到它與指針arithmatic,所以混淆,你會看到這樣的事情在類:
@interface MyClass : NSObject
{
@private
void * __reserved1;
void * __private1;
}
這是相當不錯的混淆...
但等等...... 有一個更好的方法!
進入非脆弱ABI
現在類只需要導出他們的超類和公共接口。
@interface MyClass : NSObject
@property (readonly,retain) id someIVar;
和類中的其他內容,可以包含在類擴展:
@interface MyClass()
{
id someObj;
}
@property (readwrite,retain) id someIVar;
提防,這將僅適用於iPhone和64位OS X 32位OS X的工作仍然是舊的ABI和需要在那裏工作的圖書館將需要以前的方式。
請參閱http://stackoverflow.com/questions/5615695/best-way-of-declaring-private-variables-in-cocoa和http://stackoverflow.com/questions/17575119/private-properties-vs-實例變量在弧 – Rob