2012-12-26 76 views
3

我正在創建一個iPhone自定義框架,該框架應該可以集成到任何iPhone應用程序中。Objective-C包級別屬性

我在我的框架的一個公共頭文件中創建了一些屬性。我想給@package級別訪問這些屬性,以便這些屬性只能在框架內的類中訪問。

我不希望用戶使用這些屬性。

請告訴我是否可以這樣做。如果是的話,請給我一些關於如何實現這一目標的想法!

+0

你想讓那些私人? – NSCry

+0

你是在談論'ivar'還是'property' –

回答

4

首先,您應該知道,沒有辦法完全禁止庫的用戶調用方法。即使你沒有在你的頭文件中聲明它,用戶也可以自己聲明並使用它。儘管如此,他仍然必須找出您的財產的名稱,例如通過在您的圖書館上運行classdump。

因此,在Objective-C中,我們通過不在頭部聲明它們(這是你的類的公共部分)來聲明屬性,而是通過在實現中聲明它們(這是你的類的「私有」部分)。

如果您創建另一個包含類的類別的標題,您可以添加一些不屬於主標題的屬性 - 所以不能在您的類的公共聲明中添加 - 但仍然可以導入其他類的庫知道這個頭。

例如:

MyClass+SecretProperties.h: 

@interface MyClass() 
@property (strong) NSString *secretString; 
@end 

MyClass.m: 

#import "MyClass.h" 
#import "MyClass+SecretProperties.h" 
@implementation MyClass 
@synthesize secretString; // Depending on your runtime, you may not even need to this - properties are auto-synthesized in the latest SDKs. 
… 
@end 

OtherClass.m: 

#import "MyClass.h" 
#import "MyClass+SecretProperties.h" 

// Now you can use secretString on instances of MyClass 

然後因爲你只出口MyClass.h與庫中,用戶不知道,有一個secretString財產:)這是你可以得到一個@package範圍最接近據我所知。

+0

工程很好。謝謝! – saikamesh

0

如果你想使這些屬性爲私人然後使用下面的東西。 在.m文件中使用目標c的擴展特徵。

@interface InitialViewController() 
//declare your property here 
@end 
+0

如果我在.m中聲明屬性,我無法從框架內的任何其他類訪問它們。 – saikamesh

相關問題