我開始學習和開發iOS4,所以我只是跳過舊的伊娃聲明慣例,並開始使用純屬性,甚至沒有聲明ivars。一切都很順利,我甚至在應用程序商店發佈了我的第一個自制應用程序。但接着在我的開發公司,人們告訴我他們仍在使用舊的慣例,並且聲明ivars的名字是下劃線,使用屬性併合成它們(參見最後的例子)。他們還表示,只有當需要外部訪問ivars時才使用屬性,而對於內部訪問,他們使用直接ivars(用於定製類)。我被告知,他們這樣做是因爲他們遇到了一些奇怪的泄漏,有時出現在使用自定義類並且無視viewDidUnload中的屬性時(因爲將nil設置爲屬性有時不會釋放那些ivar對象)是否省略屬性的ivars聲明可能會導致故障或泄漏?
只是想知道爲什麼我應該使用伊娃聲明時使用屬性和綜合做所有需要的東西。我甚至可以在dealloc中直接使用他們的名字直接訪問ivars。那麼,有沒有人遇到過這個問題,或者你們中的很多人仍然堅持舊的聲明慣例?
@interface ContactModel : NSObject {
NSString *_firstName;
}
@property (nonatomic, retain) NSString *firstName;
@end
@implementation ContactModel
@synthesize firstName = _firstName;
-(void)dealloc{
[_firstName release];
[super dealloc];
}
@end
還應該注意的是,Apple在生成主應用程序委託類文件併合成window = _window時仍使用舊的聲明樣式。嗯,目前,我對於應該採用什麼樣的約定有點困惑,所以歡迎任何想法:)
可能重複http://stackoverflow.com/questions/3238009/property -declaration-and-automatic-backing-storage-allocation) –