Objective-C:使用Objective-C类别公开私有财产

时间:2014-06-13 04:12:11

标签: objective-c objective-c-category

我正在寻找一种方法来创建一个私有属性(在类扩展名中的.m文件中声明)public,以便它可以在类外部访问,而不更改其原始类

有没有办法实现这一点,可能是通过Objective-C类别?

我从Apple文档中看到,虽然不推荐使用类别来重新定义原始类中已有的方法,但我不确定它是否可用于使“现有”属性可用于其他类。 / p>

2 个答案:

答案 0 :(得分:0)

这确实可以通过使用类别来表示方法。

@interface MyClass (Private)

@property (nonatomic, strong) NSObject *privatePropertyToExpose;
- (void) privateMethodIWantToUse;

@end

这就是所需要的,只需坚持你的调用类可以看到它的地方,这将允许你使用私有方法/属性。

答案 1 :(得分:0)

是的,这是可能的,并且是将这些属性公开给测试

的常见技巧

例如,您在 Animal.m 文件

中有此功能
@interface FTGAnimal ()

@property (nonatomic, strong) FTGFood *food;

@end

@implementation FTGAnimal

@end

在您的 FTGAnimalTests.m 中,您可以这样做

@interface FTGAnimal (FTGAnimalTests)

@property (nonatomic, strong) FTGFood *food;

@end

SPEC_BEGIN(FTGAnimalTests)

describe(@"FTGAnimalTests", ^{
    context(@"default context", ^{
        it(@"should initialize correct animal", ^{
            FTGAnimal *animal = [[FTGAnimal alloc] init];

            [[animal.food should] beMemberOfClass:[FTGFood class]];

        });
    });
});

SPEC_END