当我只@property
在超类中声明 a 而不声明 ivars 时,将其子类化并尝试_propertyName
在子类中使用超类 ivar() 实现 getter,xcode 调用错误声明Use of undeclared identifier '_propertyName'
。
符合最佳编程实践的解决方案是什么?
我应该@synthesize propertyName = _propertyName
在@implementation
子类中还是
@interface SuperClass : AnotherClass
{
Type *_propertyName;
}
@property Type *propertyName;
@end
编辑:
我确实了解属性访问器方法的自动“综合”以及编译器创建“下划线 ivars”。
ivar 可以从接口或实现部分中SuperClass
没有任何@synthesize
或声明的 ivars 的实现中访问。
进一步澄清我的情况:免责声明:内容从 Alfie Hanssen 窃取的代码块
@interface SuperViewController : UIViewController
@property (nonatomic, strong) UITableView * tableView; // ivar _tableView is automatically @synthesized
@end
#import "SuperViewController.h"
@interface SubViewController : SuperViewController
// Empty
@end
@implementation SubViewController
- (void)viewDidLoad
{
NSLog(@"tableView: %@", self.tableView); // this is perfectly OK
}
// ************* This causes problem **************
- (UITableView *) tableView {
if (!_tableView) { // Xcode error: Use of undeclared identifier '_propertyName'
_tableView = [[SubclassOfUITableView alloc] init];
}
return _tableView;
}
// ************************************************
@end