簡體   English   中英

Objective-C包級屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM