Несмотря на то, что в этом коде много ошибок, вероятной причиной вашего сбоя является то, что вы выпускаете object
в пределах -name, не вступая во владение им - если вы не создаете object
в методе посредством вызовадля -alloc, -new или -copy этот метод не владеет им и не отвечает за его освобождение.Это приводит к тому, что этот объект является недействительным в NSMutableArray, поэтому, когда _result освобождает, он пытается освободить недопустимый кусок памяти и вылетает.
Кроме того, свойства не являются просто локальными переменными для отдельных функций, они 'Переменные-члены для экземпляров класса, для которого вы пишете эти классы.Если ваша конечная цель состоит только в том, чтобы вернуть автоматически освобожденный массив и установить его в результате, вы можете сделать следующее:
- (NSMutableArray *) name {
//call a convenience method- it comes back autoreleased
NSMutableArray* theArray = [NSMutableArray array];
[theArray addObject:object];
//don't release object unless you took ownership of it in this function
return theArray;
}
, а затем за пределами функции либо вызвать self.result = [... name]
, либо [self setResult:[... name]];