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ます。

MammalSubclass.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 に答える