昨晚测试了private method,很自然想看看private iVar在ObjC里能怎样?
First, ObjC提供了@private,可以在.h中把iVar定义为private,但对于只在Class里使用的iVar,我是不想让它出现的.h中的。有没有办法做到这一点?
有!在国外的论坛找到一种方法,但不清楚是否是推荐做法。
还是利用category。
在.m中定义一个当前Class的category(可以是无名的),在category里定义property,但是category的implementation里是不能有synthesize的,所以要在当前Class里synthesize,如下所示
@interface MyClass ()
@property int privateMember;
@end
@implementation MyClass
@synthesize privateMember;
- (void)print {
NSLog(@"privateMember = %d", privateMember);
}
@end
那SubClass是否可以访问到这个privateMember呢?答案和之前的privateMethod测试类似,如果在同一个文件中,SubClass可以使用self.privateMember访问到,但不能直接使用privateMember访问。由于dot syntax(self.privateMember)本质上是getter方法,根据之前的测试,在文件作用域内有效是正常的。