在iPhone上..为什么这样的代码会导致内存泄漏? 2分钟后,净字节数翻了一番。 我正在做的就是用NSTimer调用以下方法在屏幕上移动一个球。
有什么想法吗?
- (void)nextFrame:(NSNotification *)notification {
ballInstance.frame = CGRectMake(value, 0, 320, 480);
}
这里是'完整'代码,新项目,仍然表现相同。它会在屏幕上移动jpg,因为它会大量消耗内存。如果我从'value'中删除'++',那么内存就没问题了。 (换句话说有一个静态图形)所以....是缓存的图像是问题吗? 如果是这样,我怎么能阻止它达到天文尺寸?
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window makeKeyAndVisible];
NSTimer * nSTimer =[NSTimer scheduledTimerWithTimeInterval: .02
target: self
selector: @selector(tick)
userInfo: nil
repeats: YES];
value =0;
}
- (void)tick {
NSLog(@"tick");
myOutlet1.frame = CGRectMake(value++, 0, 320, 480);
}
答案 0 :(得分:8)
发布的代码没有泄漏。问题出在其他地方。
如果您知道nextFrame:
内部存在泄漏,则必须在-[Ball setFrame:]
内,因为它是此方法中发送的唯一消息。
答案 1 :(得分:3)
泄漏不在您显示的代码中,特别是如果frame
是@synthesized
属性。您需要显示更多代码,或者花一些时间与仪器一起找出泄漏的内容以及分配的位置。
答案 2 :(得分:2)
这是iPhone OS 3.0中的一个错误。图形系统的分配器
将realloc事件报告为malloc事件,因此ObjectAlloc会计算 这些作为几乎从未被释放的新对象。我不是 确定添加泄漏工具时可能看不到的原因,但是 这两种工具都不会显示真正的泄漏。
虽然我仍然不知道如何纠正它。
答案 3 :(得分:1)
我发布了一个完整的示例应用程序,似乎或多或少与上面的“新项目”示例相匹配。你能看看它,看看这是否给你任何想法?我在模拟器和设备上运行它没有泄漏。
http://static.fatmixx.com/MemTestApp.zip
这看起来确实没有泄漏。我正在建立iPhoneOS 3.1 - Debug。
Sujal