iPhone CGRectMake内存消耗

时间:2009-10-06 16:23:05

标签: iphone objective-c cocoa memory-leaks

在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);
}

4 个答案:

答案 0 :(得分:8)

发布的代码没有泄漏。问题出在其他地方。

如果您知道nextFrame:内部存在泄漏,则必须在-[Ball setFrame:]内,因为它是此方法中发送的唯一消息。

答案 1 :(得分:3)

泄漏不在您显示的代码中,特别是如果frame@synthesized属性。您需要显示更多代码,或者花一些时间与仪器一起找出泄漏的内容以及分配的位置。

答案 2 :(得分:2)

According to Apple:

  

这是iPhone OS 3.0中的一个错误。图形系统的分配器
  将realloc事件报告为malloc事件,因此ObjectAlloc会计算   这些作为几乎从未被释放的新对象。我不是   确定添加泄漏工具时可能看不到的原因,但是   这两种工具都不会显示真正的泄漏。

虽然我仍然不知道如何纠正它。

答案 3 :(得分:1)

我发布了一个完整的示例应用程序,似乎或多或少与上面的“新项目”示例相匹配。你能看看它,看看这是否给你任何想法?我在模拟器和设备上运行它没有泄漏。

http://static.fatmixx.com/MemTestApp.zip

这看起来确实没有泄漏。我正在建立iPhoneOS 3.1 - Debug。

Sujal