Objective-C的:让私有财产公众的Objective-C类(Objective-C: Mak

2019-10-20 07:02发布

我正在寻找一种方法,使私有财产(类扩展中.m文件声明)公有的,因此它是在类的外部访问, 而不改变其原来的类

有没有办法做到这一点,可能通过Objective-C的类别?

我从苹果公司的文档查看该类别可以使用,但不建议,已经重新定义了原始类的方法,但我不知道,如果它可以被用来制造“现有”提供给其他类的属性。

Answer 1:

这确实是可以通过使用类别的表面的方法。

@interface MyClass (Private)

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

@end

这一切都需要,只要坚持在某处在您的调用的类可以看到它,这将让你使用私有方法/属性。



Answer 2:

是的,这是可能的,而且是一种常见的伎俩揭露那些属性测试

因此,例如,你在你的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


文章来源: Objective-C: Make private property public with Objective-C category