#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. Спасибо, чувак, я внес изменения и сохранил их в вызывающем методе. Теперь утечка остановлена и сбоев нет. Еще раз спасибо!