0

我有两个相互继承的基本类:

基类:

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

// .m
@synthesize myProperty = _myProperty;

子类:

// .h
@interface Child : BaseClass
@end

ChildClass.m中,我想使用ivar访问BaseClass myProperty的 getter/setter :_myProperty

// ChildClass.m
_myProperty = 1;

当然,从 中看不到父母的@synthesizeChildClass所以我不能只使用_myProperty.

如果我@synthesize myProperty = _myProperty输入ChildClass.m,则父级的 getter/setter 将被覆盖,这不是我想要的。

有没有办法在不覆盖父母方法的情况下制作别名?

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 名称_myProperty,但您可以(并且应该)使用超类的访问器方法:

prop = self.myProperty;
[self setMyProperty:newVal];  //or self.myProperty = newVal if you prefer
于 2012-08-17T21:35:29.027 回答
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 回答