【发布时间】: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