【问题标题】:instruments: memory leak when creating UIButton仪器:创建 UIButton 时的内存泄漏
【发布时间】:2011-06-06 02:53:15
【问题描述】:

我试图找出在界面生成器中创建 UIButton 时的原因 - 通过 xcode 运行仪器应用程序时会发生内存泄漏。

这就是我创建内存泄漏的方式。

我打开了一个新应用程序,在界面生成器中打开了 myAppViewController.xib 文件。 我将背景更改为黑色。 添加了一个 UIButton,将其重命名为“foo”标题。 保存然后退出。

在 myAppViewController.h 文件中,我有以下内容

#import <UIKit/UIKit.h>

@interface miPlanNewViewController : UIViewController { 
    IBOutlet UIButton *tasksProjects; 
}
@property(nonatomic, retain) IBOutlet UIButton *tasksProjects;
@end

在 myAppViewController.m 文件中,我有以下内容:

#import "miPlanNewViewController.h"

@implementation miPlanNewViewController
@synthesize tasksProjects;

...
//the normal methods you get
...
- (void)dealloc {
    [super dealloc];
}
@end

这是我目前在乐器中得到的屏幕截图。

但是我注意到一件事......

我还没有在界面构建器中将 Outlet 连接到 uibutton,但是当我从界面构建器中删除 UIButton,保存,然后再次使用仪器运行程序时,我根本没有任何泄漏。

谁能解释一下发生了什么以及我该如何解决这个问题。谢谢。

【问题讨论】:

  • 您在设备而不是模拟器上测试时是否看到了这一点?根据 Apple 的建议,您不应该使用 iOS 模拟器进行内存泄漏检查,因为模拟器会在设备不会泄漏的地方泄漏。
  • ...我明白了。但是,在我的其他项目中,模拟器在同一个地方泄漏,并且有时当我在视图之间切换大约十次时也会关闭应用程序。这也是因为我在模拟器上吗?当然模拟器不应该仅仅因为它是模拟器就关闭我的应用程序。有时我会在模拟器关闭时看到 te exc_bad_access 警告,这在大多数情况下表示泄漏?
  • 如果您的应用程序由于内存问题而关闭,这不会是因为您在上面看到的泄漏。它只泄漏了 128 个字节,没什么。您可能会泄漏数千次,但仍然没有收到内存警告。我的意思是你不应该使用模拟器进行内存调试。模拟器不反映设备中发生的情况。您必须使用该设备进行内存泄漏测试和调试。

标签: iphone memory-leaks uibutton instruments iboutlet


【解决方案1】:
  • 首先,您没有释放财产。 在 dealloc 你应该有 [tasksProjects release]; 和 viewDidUnload 你应该有 self.taskProjects = nil;
  • 其次,正如 lxt 所说,您不应该使用模拟器进行内存泄漏检查。
  • 第三,检查您是在构建版本而不是调试。

【讨论】:

  • 使用调试构建和模拟器有什么问题?
猜你喜欢
  • 2012-07-06
  • 2011-02-15
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多