这是具有Objective-C属性的未定义行为吗?

时间:2010-09-20 18:23:24

标签: iphone objective-c properties

我在最近工作的项目中有类似下面的代码。

@interface DetailsViewController : UIViewContoller {
  UIView* headerView_;
}
@property (nonatomic, retain) UIView* headerView;
@end

@implementation DetailsViewController
@synthesize headerView = undefinedVariableName_;
// ...
@end

undefinedVariableName_未在项目的任何地方定义,实际上是一个不太明显的错字。

这编译得非常好(没有错误或警告),甚至在iOS 4上运行正常。直到程序在3.1.3固件上崩溃才发现此错误。

有人知道上述行为是否被视为未定义?有没有办法让编译器捕获这样的错误?

1 个答案:

答案 0 :(得分:1)

在现代Objective-C运行时,您不必自己声明ivars,编译器将在@synthesize处为您创建它们。如果它在较旧的iOS上崩溃,那么这个版本可能还不支持现代运行时。