Управление памятью в iPhone? - PullRequest
0 голосов
/ 16 ноября 2011
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

UILabel *retval = (id)view;

if (!retval) {
    retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
}

NSDictionary *destination = [appDelegate.destinations objectAtIndex:row];
retval.text = [destination objectForKey:@"name"];
retval.font = [UIFont systemFontOfSize:18];
return retval;
}

См. Способ. После выполнения Product> Analyze в XCode я получу следующее предупреждение по номеру строки

return retval;

Potential leak of an object allocated on line 213 and stored into 'retval'

Дайте мне знать, что это такое, как мне выпустить,

Пожалуйста, отредактируйте этот код и объясните мне, что вы в нем изменили, Спасибо

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

retval - это UILabel, который вы выделяете, но никогда не отпускаете.Обычно вы создаете его как

retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)] autorelease];

, а в вызывающем методе добавляете его в представление или как угодно.

1 голос
/ 16 ноября 2011

Просто, когда вы выделяете метку, держите ее в режиме автоматического выпуска, так как вам нужно будет где-то выпустить RETVAL. Вы не выпустили его, поэтому обнаружена утечка.

retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)]autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...