我正在創建一個iPhone自定義框架,該框架應該可以集成到任何iPhone應用程序中。Objective-C包級別屬性
我在我的框架的一個公共頭文件中創建了一些屬性。我想給@package
級別訪問這些屬性,以便這些屬性只能在框架內的類中訪問。
我不希望用戶使用這些屬性。
請告訴我是否可以這樣做。如果是的話,請給我一些關於如何實現這一目標的想法!
我正在創建一個iPhone自定義框架,該框架應該可以集成到任何iPhone應用程序中。Objective-C包級別屬性
我在我的框架的一個公共頭文件中創建了一些屬性。我想給@package
級別訪問這些屬性,以便這些屬性只能在框架內的類中訪問。
我不希望用戶使用這些屬性。
請告訴我是否可以這樣做。如果是的話,請給我一些關於如何實現這一目標的想法!
首先,您應該知道,沒有辦法完全禁止庫的用戶調用方法。即使你沒有在你的頭文件中聲明它,用戶也可以自己聲明並使用它。儘管如此,他仍然必須找出您的財產的名稱,例如通過在您的圖書館上運行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範圍最接近據我所知。
工程很好。謝謝! – saikamesh
如果你想使這些屬性爲私人然後使用下面的東西。 在.m文件中使用目標c的擴展特徵。
@interface InitialViewController()
//declare your property here
@end
如果我在.m中聲明屬性,我無法從框架內的任何其他類訪問它們。 – saikamesh
你想讓那些私人? – NSCry
你是在談論'ivar'還是'property' –