smi*_*org 15 properties objective-c instance-variables ios
我正在开发构建iOS 6应用程序.
我有一个类TDBeam,它继承自超类TDWeapon.
超类TDWeapon在TDWeapon.h文件中声明了@property:
@interface TDWeapon : UIView
@property (nonatomic) int damage;
@end
Run Code Online (Sandbox Code Playgroud)
我没有明确地@synthesize属性,因为我让Xcode自动这样做.
在子类TDBeam中,我覆盖了TDBeam.m文件中的getter:
#import "TDBeam.h"
@implementation TDBeam
- (int)damage {
return _damage;
}
@end
Run Code Online (Sandbox Code Playgroud)
Xcode按预期自动完成getter方法名称.但是当我尝试引用_damage实例变量(继承自超类)时,我收到编译器错误:
Use of undeclared identifier '_damage'
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我已经尝试显式添加@synthesize,并更改_damage ivar的名称,但编译器不会"看到"它或来自超类的任何其他ivars.我认为ivars是可见的,可以从子类访问?
Jos*_*ell 21
无论是显式还是自动创建,子类都不会看到合成的ivars :@synthesized实例变量的可见性是什么?由于它们在实现文件中有效声明,因此它们的声明不包含在包含子类的"转换单元"中.
如果你真的想直接访问那个ivar,你必须在子类可以看到它的地方显式地声明它(在它的默认"受保护"形式),例如私有头中超类的类扩展.
归档时间: |
|
查看次数: |
5751 次 |
最近记录: |