我正要重構我當前的iOS項目以使用ARC。在預覽更改後,使用「Refactor to ARC」工具(我xCode)將當前代碼遷移到ARC,我可以看到我當前的代碼約定可能不適用於ARC。因爲它增加了很多__weak/__strong等我的ivars。使用ARC的Objective-C屬性
我目前的慣例繼承人如何:
我定義所有實例變量爲私有或受保護的ivars。和所有公共變量我創建一個@屬性。
@interface TestClass
{
@private
NSMutableArray* mArray;
NSString* mString;
BOOL mMyBoolean;
}
@property (retain, nonatomic) NSString* string; // public
@end
中的所有對象,我總是回用@property,避免處理釋放/保留,所以如果我有一個私有變量,它是引用,我只是創建在執行一個類別。結構(如mMyBoolean)我只是將其定義爲一個ivar。
@interface TestClass()
@property (retain, nonatomic) NSmutableArray* mArray;
@end
@implementation TestClass
@synthesize string = mString;
@synthesize mArray;
@end;
但是因爲新的ARC正在照顧保留/發佈我正確地不需要私有變量支持@property。
那麼什麼樣的代碼約定更合適?我一直在考慮在界面中定義屬性,如下所示:
@interface TestClass
{
@private
NSMutableArray* mArray;
BOOL myBoolean;
}
@property (strong, nonatomic) NSString* string;
@end
@implementation TestClass
@synthesize string;
@end
並且不使用私有屬性的類別屬性。 (我也刪除了「m」前綴),我沒有定義@property應該使用的支持ivar,而是我只是讓xcode使用它的自動生成?
+1爲始終如一。使用ARC可以很容易地混合和匹配直接ivars和屬性,但它可以變得有點難看 – jrturton 2012-04-18 08:09:46
謝謝!當我寫這個問題時,我意識到它可能是抽象的,但我認爲你做了一個偉大的工作,概述了公約背後的真實想法。 – 2012-04-18 11:06:27