2010-09-20 28 views
1

我在最近的一個項目中使用了以下代碼。這是未定義的行爲與Objective-C屬性?

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

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

undefinedVariableName_沒有在項目中的任何地方定義,實際上是一個不太明顯的錯字。

這編譯完美(沒有錯誤或警告),甚至在iOS 4上運行良好。直到程序崩潰在3.1.3固件上,我沒有發現這個錯誤。

有誰知道上述行爲是否被認爲是未定義的?有沒有辦法讓編譯器捕獲這樣的錯誤?

回答

1

在現代Objective-C運行時中,您不必自己聲明ivars,編譯器會在@synthesize處爲您創建它們。如果它在較舊的iOS上崩潰,則此版本可能不支持現代運行時。

+0

我相信iOS一直使用現代運行時。 http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html – 2010-09-20 18:38:33

+0

我認爲@David有一個好點,但是謝謝@Sven指出編譯器可以實際自動創建ivars。 – 2010-09-21 02:11:53