0

互いに継承する 2 つの基本的なクラスがあります。

ベースクラス:

// .h
@interface BaseClass : NSObject
@property int myProperty;
@end

// .m
@synthesize myProperty = _myProperty;

子クラス:

// .h
@interface Child : BaseClass
@end

では、 ivarを使用して の getter/setterChildClass.mにアクセスしたいと考えています。BaseClass myProperty_myProperty

// ChildClass.m
_myProperty = 1;

もちろん、親の@synthesizeは からは見えないChildClassので、そのままでは使えません_myProperty

を入れる@synthesize myProperty = _myPropertyChildClass.m、親のゲッター/セッターがオーバーライドされますが、それは私が望むものではありません。

親のメソッドをオーバーライドせずにエイリアスを作成する方法はありますか?

4

3 に答える 3

2

手動で宣言してください。その後、iVar のスコープ アクセスを完全に制御できます。

@protectedサブクラスへのアクセスを提供@packageし、実装イメージ内のすべてのものから見えるようにします (独自の共有フレームワーク イメージを実装できない iOS ではあまり役に立ちません)。

詳細については:

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocDefiningClasses.html

于 2012-08-17T23:00:34.433 に答える
0

方法はありますが、バッキング ivar を表示する必要があります。

@interface MyTest : NSObject
{
@public
    int _foo;
}
@property int foo;

@end
@interface MyTestSuper : MyTest
@end

それを行うには:

MyTestSuper *x = [MyTestSuper new];
x->_foo = 5;

PS: これは、「foo」をバッキング ivar として使用するだけで機能します。

于 2012-08-17T23:05:03.233 に答える
0

ivar 名を使用することはできませんが_myProperty、スーパークラスのアクセサー メソッドを使用できます (使用する必要があります)。

prop = self.myProperty;
[self setMyProperty:newVal];  //or self.myProperty = newVal if you prefer
于 2012-08-17T21:35:29.027 に答える