ios - UIPoverController 每次使用时都会创建实时字节

标签 ios uipopovercontroller instruments

我正在事件处理程序上弹出 Popover Controller 。每次调用此事件处理程序时,我的应用程序的内存占用量都会增加。一旦我关闭 View Controller ,我期望内存占用量会减少,但它永远不会发生。

我使用 Instruments 中的分配工具来分析内存。

我在这里做错了什么吗?

-(IBAction)createNewAccount :(id) sender
{

    GSNewAccountViewController *createNewAccountVC = [[GSNewAccountViewController alloc]initWithNibName:@"GSNewAccountViewController" bundle:nil];        
    UIPopoverController *popover = 
    [[UIPopoverController alloc] initWithContentViewController:createNewAccountVC]; 

    popover.popoverContentSize = CGSizeMake(kScrollViewWidth, kScrollViewHeight);

    [popover presentPopoverFromRect:CGRectMake(770,-420,320,480) inView:self.view permittedArrowDirections: UIPopoverArrowDirectionUp animated:YES];

    popover.delegate = self;

    [createNewAccountVC release];


}

- (void)popoverControllerDidDismissPopover:
(UIPopoverController *)popoverController {

    [popoverController release];

}

更新:

我正在其 ViewDidUnload 方法中释放 GSNewAccountController 的所有 Outlet。但即使当我关闭 Popovercontroller 时,vieUnDIdload 方法也不会被调用

最佳答案

您应该检查在 popoverController 释放时您的 GSNewAccountViewController 是否也被释放。检查事件 GSNewAccountViewController 对象的数量,而不是监视事件字节数。要在“分配工具”中执行此操作,请转到“工具”窗口的右上角,通过在文本字段中键入 GSNewAccountViewController 来过滤分配。然后检查每次触发 IBAction 时会发生什么。当您触发 IBAction 时,生活数应变为 1,并在释放 popoverController 时返回到零。

如果事件 GSNewAccountViewController 对象的数量永远不会为零,您应该检查是否在 GSNewAccountViewController 类中创建了某种类型的保留周期,从而阻止调用 dealloc 和 viewDidUnload 方法。通过保留周期,GSNewAccountViewController 会保留一个对象,而该对象又会保留您的 GSNewAccountViewController。由于两者都互相保留,因此不会调用它们的 dealloc 方法,并且对象永远不会被销毁。

为了进行测试,尝试创建一个非常简单的 iPad 项目,在主视图上有一个按钮,并使用 IBAction 来呈现一个 popoverController,其中包含一个从带有 UITableViewController 的普通子类的 NIB 加载的 viewController。查看分配工具,它显示当显示 popoverController 时正在创建子类,并在关闭 popoverController 时销毁子类。

祝你好运

关于ios - UIPoverController 每次使用时都会创建实时字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375678/

相关文章:

ios webcal 请求 - 完成回调?

iphone - iPad 应用程序被抛弃,而 Allocations Instrument 显示没有异常的内存使用情况

Xcode 仪器无法运行,因为此错误 "the target device service is too old"

ios - UIAutomation 无法点击按键

ios - 如何将整数值解析为 Json iOS?

php - Xcode 7 beta swift 使用未解析的标识符

iphone - iOS - 在特定时间覆盖特定录音

ios - 如何指定弹出 Controller 的箭头指向的位置

objective-c - iOS 弹窗作为菜单教程

ios - 在屏幕上居中 Swift Pop-Over