Как освободить локально созданный объект, пока он используется в качестве возвращаемого объекта

#objective-c #ios #memory-management #memory-leaks

#objective-c #iOS #управление памятью #утечки памяти

Вопрос:

В моем pgm я получаю предупреждение об утечке в этом сегменте.

-(NSMutableArray *)filterArrayForBank:(NSMutableArray *)originalArray с ключом:(NSString *)ключ{ NSMutableArray *MutableArray=[[NSMutableArray alloc]инициализация];

 for (int i=0; i<[originalArray count]>0; i  ) {
    if([[[originalArray objectAtIndex:i]objectForKey:@"transType"] isEqualToString:key]){
        [mutableArray addObject:[originalArray objectAtIndex:i]];
    }
}
//////NSLog(@"mutableArray %@",mutableArray);
       return mutableArray ;
  

}

если я заблокирую эту утечку с помощью приведенной ниже строки, приложение завершит работу

либо вернуть [автоматический выпуск MutableArray];

или

NSMutableArray *Изменяемый массив=[[[NSMutableArray alloc]инициализация] авторелиз];

пожалуйста, помогите мне остановить эту утечку. заранее спасибо.

Комментарии:

1. происходит ли утечка памяти при выделении этого NSMutableArray *mutableArray=[[[NSMutableArray alloc]init]autorelease]; ?

2. @sherilyn, он не показывает никакой утечки, но приложение получает сбой.

Ответ №1:

Если вы возвращаете автоматически выпущенный массив, вам нужно убедиться, что вы сохраняете его в вызывающем методе. Однако, если вы не сохраняете его в вызывающем методе, попробуйте переименовать метод в:

 -(NSMutableArray *)newFilterArrayForBank:(NSMutableArray *)originalArray withKey:(NSString *)key
  

Это уведомит компилятор о том, что вы выделяете новый NSMutableArray.

Комментарии:

1. можете ли вы, плз, объяснить, изменение метода решит проблему?. Я не сохранил в вызывающем методе.

2. @Ram Если вы хотите вернуть принадлежащий объект, имя вашего метода должно начинаться с new. Это удалит предупреждение, а также является хорошей практикой, поскольку из имени метода очевидно, что создается новый объект.

3. Спасибо, чувак, я внес изменения и сохранил их в вызывающем методе. Теперь утечка остановлена и сбоев нет. Еще раз спасибо!