4

在Objective-C中,我很好奇如何實現像@private,@protected等實例變量的訪問控制。@private是如何實現的?

我認爲是在一些像這樣的方式產生不同的結構:

@interface Foo { 
    int bar; 
    @private 
    int baz; 
    @public 
    int qux; 
} 

=>東西沿着

struct Class_Foo_Protected { 
    int bar; 
}; 

struct Class_Foo_Private { 
    int baz; 
}; 

struct Class_Foo_Public { 
    int qux; 
}; 

但是我真的不知道該線。任何人都知道這是如何完成的?

回答

7

這些修飾符不會改變任何關於類的內存佈局。編譯器本身會記住哪個ivar是公共的,受保護的或私有的,並且如果您嘗試從不適當的地方訪問它們,則會發出錯誤。這是在任何代碼生成之前完成的,並且不會影響生成的代碼。

+0

非常有趣,謝謝。 – 2010-12-04 08:24:44