2011-09-21 107 views
2

知道從Xcode4和LLVM 2.0有新功能「默認@syntesize」@synthesize默認問題

我嘗試下面的代碼:

@interface PDFPage : NSObject 

@property (nonatomic,copy) NSString *name; 
@property (nonatomic,assign) int page; 

@end 

@implementation PDFPage 

-(void)dealloc 
{ 
    [self.name release]; 
    [super dealloc]; 
} 

@end 

我認爲@synthesize沒有更長的必要,但編譯器(蘋果LLVM 2.1)給我一個警告,如'警告:屬性'頁面'需要方法'頁'定義 - 使用@synthesize,@dynamic或提供方法實現'

我還有什麼需要做的默認情況下啓用@synthesize? (我也試過標誌-Xclang -fobjc-nonfragile-abi2,但它們不被識別)。

謝謝

回答

5

蘋果刪除,因爲它是導致試圖autosynthesize屬性時,編譯器有問題或不確定性來自非脆弱ABI自動@synthesize功能。有關詳細信息,請參閱this blog post

2

@synthesize是必要的,什麼不再是必要的是一個單獨的伊娃宣言。有一次,計劃@synthesize是自動的,但有問題,所以計劃沒有實現。

2

重溫這個答案,當前版本的LLVM編譯器允許隱式合成。但是,使用當前編譯器(2012年末),如果要指定伊娃爾名稱,則標量屬性聲明要求您手動聲明@synthesize語句中的屬性。不知道爲什麼他們做出了區分。

還有一次,您需要手動@synthesize屬性,並且這是在您已導入到源中的類別中聲明的屬性。

如果你想強制顯式合成,有一個編譯器標誌:CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS不會停止發生隱式合成,但是如果你想強制向後兼容,會發出警告。