我正在创建一个 iPhone 自定义框架,它应该能够集成到任何 iPhone 应用程序中。
我在我的框架的一个公共头文件中创建了一些属性。我想授予@package
对这些属性的级别访问权限,以便只能在框架内的类中访问这些属性。
我不希望用户使用这些属性。
请告诉我这样做是否可行。如果是,请给我一些关于如何实现这一目标的想法!
我正在创建一个 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