Objective c 目标C:使用目标C类别公开私有财产
我正在寻找一种方法,使类扩展名内的.m文件中声明的私有属性成为公共的,这样就可以在类之外访问它,而不必更改其原始类 有没有办法做到这一点,可能是通过Objective-C类别Objective c 目标C:使用目标C类别公开私有财产,objective-c,objective-c-category,Objective C,Objective C Category,我正在寻找一种方法,使类扩展名内的.m文件中声明的私有属性成为公共的,这样就可以在类之外访问它,而不必更改其原始类 有没有办法做到这一点,可能是通过Objective-C类别 我从苹果的文档中看到,虽然不推荐使用category来重新定义原始类中已有的方法,但我不确定它是否可以用于使现有属性对其他类可用。通过使用category来显示方法,这确实是可能的 @interface MyClass (Private) @property (nonatomic, strong) NSObject *p
我从苹果的文档中看到,虽然不推荐使用category来重新定义原始类中已有的方法,但我不确定它是否可以用于使现有属性对其他类可用。通过使用category来显示方法,这确实是可能的
@interface MyClass (Private)
@property (nonatomic, strong) NSObject *privatePropertyToExpose;
- (void) privateMethodIWantToUse;
@end
这就是所需要的,只要把它放在调用类可以看到的地方,这样就可以使用私有方法/属性。是的,这是可能的,并且是公开这些属性进行测试的常见技巧 例如,你在你的Animal.m文件中有这个 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
@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