【问题标题】:Memory Leaks - Objective-C内存泄漏 - Objective-C
【发布时间】:2011-06-07 05:58:27
【问题描述】:

任何人都可以看到此代码中的潜在泄漏吗?根据“NSString *ender = [temp stringFromDate:now];”行上的 Instruments,我得到了“100%”的泄漏

        NSDateFormatter* temp = [[NSDateFormatter alloc] init];
        [temp setDateFormat:@"yyyy-MM-dd"];
        NSDate *now = [NSDate date];
        NSString *ender = [temp stringFromDate:now];

        DashboardViewController *controller = [[DashboardViewController alloc] init];
        [controller initWithStartDate:ender andEndDate:ender];
        [controller initAccount:account];

        [self presentModalViewController:controller animated:NO];
        [temp release];

【问题讨论】:

  • 这对我来说真的不像泄漏。您是否尝试过内联现在日期?否则,我不会太担心,除非你的应用真的因为内存问题而崩溃
  • 什么是“内联”,如果存在内存泄漏,Apple 不会拒绝该应用程序吗?
  • Apple 不会因为内存泄漏而拒绝应用程序,因为他们无法检测到它们 :) 当然,当您的应用程序不会进入内存并挂起时,情况并非如此。
  • 他们检测不到?!
  • 内联意味着你没有特别声明变量,像这样: NSString *ender = [temp stringFromDate:[NSDate date]]; .但是如果它有内存泄漏,苹果不会拒绝你的应用程序。如果由于内存泄漏而崩溃,它将拒绝该应用程序。但是下面的其他帖子可能。无论如何更好地回答这个问题:)

标签: iphone objective-c memory ios memory-leaks


【解决方案1】:

你会在所有这些东西之后释放控制器吗?

【讨论】:

  • 我应该在展示后释放控制器吗?我没有在任何其他 presentModalViewController 调用中这样做,它们工作正常。
  • 它仍然会导致“100%”的内存泄漏。
  • 它说责任框架是“NSDateFormatter”
  • 请更新您的代码。还有,什么是“帐户”变量,你会释放它吗?
  • 另外,尝试在presentModalViewController之前写[temp release];
【解决方案2】:

此建议与原始问题无关,但我认为您应该重命名 initWithStartDate:andEndDate:initAccount: 方法,因为通常名称中带有“init”的方法会返回新实例。

也许创建您自己的-(id)initWithStartDate:endDate:account: 并从内部调用指定的初始化程序。

然后您将使用

创建一个新的控制器实例
DashboardViewController *controller = [[DashboardViewController alloc] initWithStartDate:ender endDate:ender account:account];

贡萨洛

【讨论】:

    【解决方案3】:

    由于您将控制器实例传递给 -presentModalViewController: 方法,该方法将保留您的控制器。所以你可以安全地释放你的控制器,但你也应该释放你的控制器,因为内存管理规则规定你分配+初始化的对象是你所有的,并且必须是发布。

    另一方面 - 只是一个小提示 - NSDateFormatter 是一个“重”对象,如果可能的话,缓存实例并重用它。可能这也是 Apple 弃用此方法的原因。您可以在 iOS 2.0 到 iOS 3.2 的 NSDateFormatter 上调用 -init,但在 iOS 3.2 之后它已被弃用。

    【讨论】:

    • 我也相信这个代码周围还有其他可能导致泄漏的东西..你能添加更多细节吗:)?
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多