【问题标题】:I'm leaking a few bytes -- why?我泄漏了几个字节——为什么?
【发布时间】:2011-09-22 00:50:36
【问题描述】:

很抱歉标题非常不明确,但我只是在用 LEAKS 调试我的程序,我在以下几行代码中发现了一个漏洞:

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; // LEAKS shows 80%
[dateFormat setDateFormat:@"EEE-dd-MMMM-yyyy"];
NSDate *today = [[NSDate alloc] init]; // LEAKS shows 20%
NSString *theDate = [dateFormat stringFromDate:today];

[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 withObject:theDate];

[dateFormat release];
[today release];

LEAKS 告诉我,一条线路 80% 泄漏,另一条 20%。但为什么?我正在释放两者......

它只有 16 个字节,所以我想我不应该担心......或者我应该担心这种东西?无论如何,我不明白为什么我的代码会泄漏,这让我很烦恼,所以非常感谢任何帮助。谢谢!

此外,当我们讨论 LEAKS 的主题时——我的程序中还有一些其他的 Leaked Blocks,例如“Malloc 32 Bytes Foundation -[NSCFString appendString:]”...... LEAKS 没有给我任何参考我的代码应该泄漏的地方。那么,我该如何找出这个内存泄漏的地方呢?

很抱歉,这只是基本的东西,但正如您可能知道的那样,这是我第一次使用 LEAKS。

提前致谢!

【问题讨论】:

    标签: iphone objective-c cocoa-touch memory-leaks


    【解决方案1】:

    如果您立即释放对象并且不对它们执行更多操作,我会更改您的方法。使用 auroreleased 对象尝试这种方法:

    NSString *theDate = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                                                       dateStyle:@"EEE-dd-MMMM-yyyy" 
                                                       timeStyle:nil];
    [noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 
                                withObject:theDate];
    

    *注意,我没有检查此代码的准确性或泄漏,但它应该做完全相同的事情。

    【讨论】:

      【解决方案2】:

      尝试使用自动释放的初始化程序。例如,而不是使用

      date = [[NSDate alloc] init];
      

      使用

      date = [NSDate date];
      

      等等。

      当我使用自动释放的初始化程序时,我不会收到泄漏消息。

      【讨论】:

        猜你喜欢
        • 2013-10-12
        • 2011-05-06
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        • 2013-09-05
        • 2015-11-08
        • 1970-01-01
        • 2015-07-05
        相关资源
        最近更新 更多