2011-08-09 44 views
9

有人告訴我,我可以讓性能私人,只在類的實例可以參考它們(通過自)如何使屬性保密?

但是,如果我在類的接口使用@private然後正常申報財產,它仍然可以從課外訪問......那麼,我怎樣才能讓物業變得私密?語法示例。

回答

20

您需要將這些屬性包含在類擴展中。這允許您在接口聲明中的實現文件中定義屬性(以及最近的iVar)。它類似於定義一個類別,但在括號之間沒有名稱。

因此,如果這是你的MyClass.m文件:

// Class Extension Definition in the implementation file 
@interface MyClass() 

@property (nonatomic, retain) NSString *myString; 

@end 

@implementation MyClass 

- (id)init 
{ 
    self = [super init]; 
    if(self) 
    { 
     // This property can only be accessed within the class 
     self.myString = @"Hello!"; 
    } 
} 

@end 
+4

請注意,類擴展可以位於您只在需要訪問的類中導入的頭文件中,因此可以有效地允許「庫私有」屬性。 – bbum

5

聲明的實施(.M)文件的屬性,像這樣:

@interface MyClass() 

@property (nonatomic, retain) MyPrivateClass *secretProperty; 

@end 

,您就可以使用該類中的屬性沒有編譯器警告。

+0

在那裏創造財產有什麼優勢。我們可以直接使用伊娃。是否有任何? – Imran

+1

優點是一致性(公有和私有屬性以相同的方式訪問),清晰性(屬性看起來像屬性)和靈活性(所有屬性訪問都通過相同的方法,所以懶加載,計算屬性等都是微不足道的) 。 – kubi