【问题标题】:iPhone potential leak of an object allocated in line ... and stored intoiPhone潜在泄漏的对象在行中分配...并存储到
【发布时间】:2011-01-17 03:22:57
【问题描述】:

我正在调试一个 iPhone 应用程序,该应用程序涉及一个拆分视图应用程序,该应用程序在左侧启动弹出框,并将 UINavigatorControl 作为右侧的详细视图。横向横向。

我在解决错误时遇到问题:

'在线分配(无论如何)并存储到'MasterView'中的对象的潜在泄漏

行如下:

MasterViewController *masterView = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil andArrayOfTags:[self arrayOfButtonTags:self.language]];

并且在这一行(后面几行)弹出错误

SplitViewDelegate* splitViewDelegate = [[SplitViewDelegate alloc] init];

双击内存泄漏会显示更多信息(带有蓝色箭头等)。

masterView声明上面几行,语句

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:NSUserDefaultsDidChangeNotification object:nil];

将蓝色箭头链接到 MasterViewController... 行,扩展消息为

方法返回一个具有 +1 保留计数(拥有引用)的 Objective-C 对象

然后用蓝色箭头指向上面的 splitViewDelegate 行。

我不确定如何清除此错误...有人对此有任何想法吗?我想我对代码有所了解,但我是 Objective c 的新手(但有其他语言的经验),所以和我一起了解一下这将是最有帮助的。

【问题讨论】:

    标签: iphone memory object


    【解决方案1】:

    通知中心和拆分视图线与您的问题无关。它们只是 Xcode 决定发出警告的界限。要修复错误,请在完成后释放 masterView。如果你把它放在一个属性中或在一个窗口中显示它的视图,你可以安全地调用 release 而不会被释放,因为它保留在那些进程中。

    【讨论】:

    • 在查看您的答案之前,我只是想出了同样的事情 :) 在其他地方看到类似的代码后,我添加了 [masterview release] 和 [navController release]! doh :) 无论如何,我会给你打勾,因为我很感激你花时间回答这个问题!欢呼
    【解决方案2】:

    欢迎来到 iPhone 内存管理的精彩世界。

    每当分配一块内存时,你必须确保释放它。除非你使用自动释放,它看起来像:

    MasterViewController *masterView = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil andArrayOfTags:[self arrayOfButtonTags:self.language]]autorelease];
    

    SplitViewDelegate* splitViewDelegate = [[[SplitViewDelegate alloc] init]autorelease];
    

    这是一个非常好的概述,它解释了如何比我现在更好地使用内存:http://interfacelab.com/objective-c-memory-management-for-lazy-people(忽略开头关于 HN 的咆哮)

    我希望它可以帮助您解决问题。

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多