3

我正在创建一个 iPhone 自定义框架,它应该能够集成到任何 iPhone 应用程序中。

我在我的框架的一个公共头文件中创建了一些属性。我想授予@package对这些属性的级别访问权限,以便只能在框架内的类中访问这些属性。

我不希望用户使用这些属性。

请告诉我这样做是否可行。如果是,请给我一些关于如何实现这一目标的想法!

4

2 回答 2

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 范围的 AFAIK。

于 2012-12-26T16:10:28.293 回答
0

如果您想将这些属性设为私有,请使用以下内容。在您的 .m 文件中使用目标 c 的扩展特性。

@interface InitialViewController ()
//declare your property here
@end 
于 2012-12-26T13:00:12.693 回答