[英]Objective-C Package level Property
我正在創建一個iPhone自定義框架,它應該能夠集成到任何iPhone應用程序中。
我在我的框架的一個公共頭文件中創建了一些屬性。 我想給@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范圍AFAIK最近的。
如果您想將這些屬性設為私有,請使用以下內容。 在.m文件中使用目標c的擴展特性。
@interface InitialViewController ()
//declare your property here
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.