dismissModalViewController不释放内存

时间:2013-04-13 07:22:57

标签: ios objective-c memory-management automatic-ref-counting

我有两个控制器。在第一个中,有一个buttn,当它被点击时,第二个将由presentModalViewController方法显示。但是,当我回到第一个时,dismissModalViewController被调用,第二个控制器被解除,但内存未被释放。我使用仪器来观察内存分配和弧。

我以为我可能做错了但是我尝试了官方示例代码,iPhoneCoreDataRecipes和CoreDataBooks,这也发生了。我想知道为什么没有释放momery?

以下是来自官方样本食谱的presentModal和dismissModal的代码:

- (void)add:(id)sender {
    RecipeAddViewController *addController = [[RecipeAddViewController alloc] initWithNibName:@"RecipeAddView" bundle:nil];
addController.delegate = self;

Recipe *newRecipe = [NSEntityDescription insertNewObjectForEntityForName:@"Recipe" inManagedObjectContext:self.managedObjectContext];
addController.recipe = newRecipe;

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addController];
    [self presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [addController release];
}

- (void)recipeAddViewController:(RecipeAddViewController *)recipeAddViewController didAddRecipe:(Recipe *)recipe {
    if (recipe) {
         // Show the recipe in a new view controller
        [self showRecipe:recipe animated:NO];
    }

    // Dismiss the modal add recipe view controller
    [self dismissModalViewControllerAnimated:YES];
}

我做了类似的事情,但是我使用了arc,所以我没有释放线。

1 个答案:

答案 0 :(得分:0)

您可以在模态视图控制器中进行保留循环。保留第一个对象对第二个对象具有强引用的循环,第二个对象也具有对第一个对象的强引用。阅读Apple文档中的保留周期:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#//apple_ref/doc/uid/TP40004447-1000810

在这里:

http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html(使用终身限定符避免强参考周期)