【问题标题】:iOS memory leak on app loading应用加载时 iOS 内存泄漏
【发布时间】:2012-08-24 07:49:07
【问题描述】:

我正在尝试查找我的应用程序中存在的内存泄漏。当应用程序加载时,我会立即遇到类似于仪器中的内存泄漏

我该如何调试呢?无论我运行我的应用程序多长时间或做什么,它都不会自我复制,只有在应用程序加载时。

这是我在委托中的代码

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{   

    tabBarController = [[UITabBarController alloc] init];

    search = [[iPhoneView alloc] initWithNibName:@"iPhoneView" bundle:nil];
    homeNavigationController = [[UINavigationController alloc] initWithRootViewController:search];

    favouritesNavigationController = [[UINavigationController alloc] init];
    favoritesViewController = [[FavoritesViewController alloc]init];
    [favouritesNavigationController pushViewController:favoritesViewController animated:NO];

    aboutUsViewController =[[AboutUsViewController alloc] init];

    UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"toolbox" image:[UIImage imageNamed:@"aboutus"] tag:0];
    aboutUsViewController.tabBarItem = item;
    [item release];

    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"αγαπημένα" image:[UIImage imageNamed:@"favorites"] tag:0];
    favouritesNavigationController.tabBarItem = item2;
    [item2 release];

    NSArray *tabBarControllerCollection = [NSArray arrayWithObjects:homeNavigationController,favouritesNavigationController,aboutUsViewController,nil];
    [tabBarController setViewControllers:tabBarControllerCollection animated:NO];

    [window setRootViewController:tabBarController];
    [tabBarControllerCollection release];   //added that for the leaks

    //[window addSubview:tabBarController.view]; for the warning thing about window and root view controller
    [window makeKeyAndVisible];
}



- (void)dealloc {
    [tabBarController release];
    [search release];
    [favoritesViewController release];
    [favouritesNavigationController release];
    [aboutUsViewController release];
    [window release];
    [super dealloc];
}

【问题讨论】:

  • 它也可能在您在那里创建的视图控制器的初始化代码中的任何位置,这可能需要检查相当多的代码:) 也许有人有一个好主意来系统地解决这个问题,我也会对此感兴趣
  • 你用过ARC吗?不推荐使用“- (void)applicationDidFinishLaunching:(UIApplication *)application”方法请使用:“- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:”(NSDictionary *)launchOptions
  • 不,我没有使用 ARC
  • 是的,我知道它可能在任何地方,但泄漏很快就会出现,而且总是同时出现,所以我认为它应该在委托或某事上。
  • 您是在模拟器还是在设备上分析应用程序?您的部署目标是什么? 5.0? 5.1?

标签: iphone objective-c ios memory-leaks


【解决方案1】:

请使用泄漏的调用树视图,这将显示问题发生的位置并帮助您进行故障排除。也可以尝试使用真实设备,因为模拟器可能会显示误报。

【讨论】:

  • 如果使用调用树我什么都没有得到它是空的,这就是我无法调试的原因!
  • 我又添加了一张来自循环的屏幕截图
  • 抱歉,不清楚。您是否为泄漏显示设置了任何过滤器(泄漏下方的面板)?
  • 你使用模拟器还是真机?两者都一样吗?
  • 您看到只有泄漏还是全局内存使用量在增加?查看脏内存,还可以查看 Apple WWDC 2012 中有关内存泄漏故障排除的视频 - 可能会有所帮助。
【解决方案2】:

释放未释放的homeNavigationController,并检查您是否缺少其他地方。

【讨论】:

  • 可能是favouritesNavigationController,aboutUsViewController也需要发布?
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多