Утечка памяти в Objective-C, вопрос управления памятью - PullRequest
1 голос
/ 03 июня 2011

Я новичок в Objective C и считаю, что у меня есть ситуация утечки памяти в этой функции, но я не уверен, когда удалять / освобождать объекты.

Так как я храню recipeObject в моем представлении, Я освобождаю его в dealloc представления, но я не уверен насчет представления?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    RecipeObject * recipeObject = (RecipeObject *)[maRecipes objectAtIndex:indexPath.row];
    RecipeView * recipeView = [[RecipeView alloc] initWithNibName:@"RecipeView" bundle:nil];
    [recipeView setRecipeObject:RecipeObject];  
    [self.navigationController pushViewController:recipeView animated:YES];
}

Может кто-нибудь показать мне пример того, что делать, или объяснить это?

Ответы [ 3 ]

4 голосов
/ 03 июня 2011

Первое правило, которое следует помнить, когда вы имеете дело с управлением памятью в Objective-C, это то, что вы несете ответственность за все, что вы (1) выделяете (используя alloc), (2) обновляете (используя * 1002)*), (3) копия (с использованием copy) или (4) сохранение (с использованием retain).В этих четырех случаях вы должны явно release (или autorelease) эти ссылки.

В вашем примере, поскольку вы выделили recipeView, вы должны освободить его, как только он будет добавлен в контроллер навигации.

RecipeView * recipeView = [[RecipeView alloc] initWithNibName:@"RecipeView" bundle:nil];
[self.navigationController pushViewController:recipeView animated:YES];
[recipeView release];

Если вы этого не сделаете, вы потеряете recipeView, так как он выходит из области видимости после выхода из метода, и у вас больше не будет доступа к выделенному пространству в куче.

Имеет ли это смысл?

0 голосов
/ 03 июня 2011

Добавьте это к последней строке кода

[recipeView release];
0 голосов
/ 03 июня 2011

Вы должны отпустить recipeView после pushViewController.Когда вы нажимаете на нее, удержание завершено, а затем при нажатии на кнопку освобождения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...