繁体   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