隐藏公共框架标头中的属性,但在内部保留可用

时间:2013-09-30 13:37:49

标签: objective-c

我需要在类中包含从公共框架头中排除的属性,但它可以在其他框架类中内部使用。 我现在做的是:

MyClass.h:

@interface MyClass: NSObject

@end

MyClass的+ Internal.h

@interface MyClass (Internal)
@property (nonatomic, copy) NSString *mySecretProperty;
@end

MyClass.m

#import "MyClass.h"
#import "MyClass+Internal.h"

@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end

@implementation MyClass
@end  

我可以使用私人财产:

MyOtherClass.m:

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyOtherClass
- (void)test {
    MyClass *myClass = [MyClass new];
    NSLog(@"%@", myClass.mySecretProperty)
}
@end 

但是我不喜欢这个设置是因为我在Internal类别和匿名类别中有重复的属性声明。 有没有办法改善这种设置?

1 个答案:

答案 0 :(得分:10)

我认为你只能使用类扩展,不需要使用类别。快速修复是从括号中删除类别名称,将其转换为类扩展,然后从.m文件中删除类扩展声明。 在此之后,您只需在框架类中导入扩展标头,并确保它是框架的私有标头。

<强> MyClass.h

@interface MyClass: NSObject

@end

<强> MyClass的+ Internal.h

#import "MyClass.h"

@interface MyClass ()
@property (nonatomic, copy) NSString *mySecretProperty;
@end

<强> MyClass.m

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyClass
@end

<强> MyOtherClass.m:

#import "MyClass.h"
#import "MyClass+Internal.h"

@implementation MyOtherClass
- (void)test {
    MyClass *myClass = [MyClass new];
    NSLog(@"%@", myClass.mySecretProperty)
}
@end 

关键是要了解类别和类扩展之间的区别,请参阅此处:https://stackoverflow.com/a/4540582/703809