0

在我的代码中:

    ABNewPersonViewController *c = [[ABNewPersonViewController alloc] init];
    [c setNewPersonViewDelegate:self];
    [c setDisplayedPerson:newPerson];
    CFRelease(newPerson);


    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:c];
    [self presentModalViewController:nc animated:YES];

有些地方似乎是被遗弃的记忆,我发现了仪器。任何线索为什么?

4

2 回答 2

0

释放 c. 它已被保留在 nc

于 2013-01-24T11:08:46.433 回答
0

尝试删除 CFRelease,并将 UINavigationController 设为 ivar。这就是 ARC 如何知道将导航控制器保留在内存中,直到特定类被释放。

ABNewPersonViewController *personViewController = [[ABNewPersonViewController alloc] init];
[personViewController setNewPersonViewDelegate:self];
[personViewController setDisplayedPerson:newPerson];

//this line is not required
//CFRelease(newPerson); 

//UINavigationController *personNavigationController; define nc as ivar in the .h file.
personNavigationController = [[UINavigationController alloc] initWithRootViewController:personViewController];
[self presentModalViewController:personNavigationController animated:YES];

而且,如果您想遵循 Apple 的一些命名约定,那么您的代码的可读性肯定会很好。

于 2013-01-24T11:32:42.223 回答