他のコメントのいくつかでBAD_ACCESSの問題について説明しています。ここで何か他のことが起こっています。ARCでは、他に資格がない限り、ivarは強力です(ARC以外では、ivarはユーザーに代わってリリースされることはありません)。
たとえば、この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は別のものでなければならないため、BAD_ACCESSを取得している例を示す必要がある場合があります。
「プロパティ」または「ivar」の質問に答えて、「常にプロパティを使用する」という議論に共感しますが、個人的には、外部アクセサーを提供する必要があるものすべてにプロパティを使用し、それ以外の場合はプライベートivarを使用します( .hですが、.mファイルのプライベートインターフェイスにあります)。これにより、.hファイル内のパブリックインターフェイスが非常にクリーンになり、数か月後に戻ったときに理解しやすくなります。「常にプロパティを使用する」アプローチを採用する場合は、それらのプロパティの公開宣言をできるだけ制限することをお勧めします(可能な場合はプロパティを非公開にし、そうでない場合はプロパティの公開宣言を読み取り専用にします)読み取り/書き込みアクセスなどを提供する必要はありません)。
ちなみに、Cocoaのコーディングガイドラインの名前付けプロパティとデータ型は、ベストプラクティスの良いリファレンスです。