Это нормально, даже если это плохая идея / сбивать с толку одинаковое имя для iVar и свойства.Я удалил декларацию iVar.
@interface C: NSObject
{}
@property (nonatomic,retain) NSMutableArray *myArr;
//...
@end
Создайте свой iVar с помощью @ synthetize.
@implementation C
@synthesize myArr = _myArr;
//...
Ваш инициализация неверна.Вы назначаете iVar без использования метода установки.
-(id)init
{
//...
// You were doing
// _myArr = [[NSMutableArray alloc] init];
// You should do
NSMutableArray array = [[NSMutableArray alloc] init];
self.myArr = array;
[array release];
// You could avoid the temporary variable but this confuse XCode static analyzer
//...
}
Это нормально.Я думаю, что @synthetize создал еще один iVar для поддержки вашей собственности.Этот другой iVar не был назначен должным образом.
Вы не заметите этого, если не используете self.myArr (или эквивалент [self myArr]).
Эта путаница является основной причиной, почему хардкорПрограммист ObjC не любит новое свойство вещи.:) Это сбивает с толку новых программистов.
//version 1 of dealloc method
-(void)dealloc
{
//...
self.myArr = nil;
//...
}
Это не хорошо, когда вы обходите установщик, как в методе init.Это работало в любом случае.
//version 2 of dealloc method
-(void)dealloc
{
//...
[myArr release];
//...
}