Изображение следующее:
MyClass * myObj;
// init myObj
NSArray * array = [myObj myArray];
[myObj replaceArray:array];
В этом случае myArray
и newArray
одинаковы, что означает, что вы используете его после его выпуска. Чтобы решить эту проблему, все, что вам нужно сделать, это удалить метод replaceArray:
и реализовать свойство как @synthesize myArray
. Таким образом, приведенный выше код изменяется на
MyClass * myObj;
// init myObj
NSArray * array = [myObj myArray];
[myObj setMyArray:array];
и ваша проблема решена синтезированной реализацией.
Обратите внимание, что вы устанавливаете свое значение, создавая новый массив:
myArray = [[NSArray alloc] initWithArray: newArray];
если вы хотите именно такое поведение, вам следует изменить определение свойства, чтобы оно копировалось, а не сохранялось:
@property (nonatomic, copy) NSArray myArray;