3

我有一个内部使用 ivar 的类。我不想在类的公共接口(标头)中公开 ivar,但我在实现文件中声明并使用它,如下所示:

//--------SomeClass.h--------------
@interface SomeClass : NSObject
@end

//--------SomeClass.m--------------
@implementation SomeClass ()
{
@protected
    NSMutableDictionary *_privateData;
}

@implementation SomeClass
// ...
@end

然后在 SomeClass 的子类中,我尝试访问 _privateData:

//--------SomeSubClass.m--------------
@implementation SomeSubClass

// ...

- (void)someMethod {
    NSLog(@"%@", _privateData); // NOPE
    NSLog(@"%@", self->_privateData); // NOPE
    NSLog(@"%@", super->_privateData); // NOPE
}

// ...

@end

但我不能。有没有办法做到这一点?

4

1 回答 1

3

为了实现所需的行为,您应该创建一个子类头文件,该文件#import在您的子类文件中声明所有受保护的数据及其.m

哺乳动物子类.h:

@interface Mammal () {
   @protected
   NSMutableDictionary *_privateData;
}

//...

@end

人类.m:

#import "Human.h"
#import "MammalSubclass.h"

@implementation Human //subclasses Mammal

- (void)someMethod {
   NSLog(@"%@", _privateData);
}

//...

@end
于 2013-10-05T01:49:37.690 回答