您在其他一些評論中描述了BAD_ACCESS問題。這裏還有別的事情要做。在ARC中,除非另有資格,否則您的ivars是強大的(並且在非ARC中,他們不會以您的名義發佈)。
例如,該ARC代碼工作正常,沒有BAD_ACCESS如您在您的意見報告給其他答案:
@interface ArcTestViewController()
{
NSMutableArray *_someArray;
}
@end
@implementation ArcTestViewController
- (void)dealloc
{
_someArray = nil;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_someArray = [[NSMutableArray alloc] initWithObjects:@"Mo", @"Larry", @"Curly", nil];
}
- (IBAction)checkIvarTouchUpInside:(id)sender
{
NSLog(@"%s _someArray = %@", __FUNCTION__, _someArray);
}
@end
您可能必須向我們展示你的例子在那裏你得到你的BAD_ACCESS因爲它必須是別的東西。
在回答「財產」或「伊娃」問題時,雖然我同意「總是使用屬性」的論點,但我個人使用任何需要提供外部訪問器的屬性,否則我使用私有ivars(不是在.h中,而是在.m文件中的專用接口中)。這使得我的.h文件中的公共接口在我幾個月後回到他們的時候真的很乾淨並且很容易理解。如果您確實採用了「始終使用財產」的方法,那麼我只會建議您對這些財產的公開聲明應儘可能嚴格(如果可以,請將財產私有化,如果您不願意進行財產的公開聲明不需要提供讀寫訪問等)。
順便說一句,編碼指南爲可可是一個很好的參考最佳做法。
來源
2012-07-03 17:44:41
Rob
謝謝,我理解ARC如何處理屬性,但我的問題是確定現在局部變量是否應該用私有屬性替換(如果我們想保留它們)? –
@BillKervaski:一般來說,是的。請參閱編輯 – houbysoft
Apple建議您不要再顯式聲明變量,除非您有需要。使用屬性,如果需要直接訪問iVar,則可以在合成屬性時設置伊娃名稱,例如:@synthesize myProperty = __myVariable – isaac