0

下面的代码中是否有任何内存泄漏?我猜不,但对我来说,下面的代码分配内存但不释放它。

任何帮助表示赞赏

@autoreleasepool {
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    for (int i = 0; i < 300000; i++) {
        @autoreleasepool {
            [dict setObject:[NSNumber numberWithInt:i] forKey:[NSNumber numberWithInt:i]];
        }
    }
    [dict removeAllObjects];
}
4

1 回答 1

1

我不知道这是否会影响您的问题,但值得了解...

NSNumber 在幕后做了一些花哨的事情,特别是对于整数 0 - 12。它并不总是释放它们,因为它假设它很可能需要在将来重用它们。它们被认为足够常用,以至于不想一直保留/删除它们。

请参阅此讨论

这可能会导致一点内存没有被释放,但不会占很大比例。

将上面的代码放在 for 循环中会很有趣,看看是否多次调用它会增加内存,或者使用的内存量是否保持不变。

for (int i = 0; i < 100; i++) {
    @autoreleasepool {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        for (int i = 0; i < 300000; i++) {
            @autoreleasepool {
                [dict setObject:[NSNumber numberWithInt:i] forKey:[NSNumber numberWithInt:i]];
            }
        }
        [dict removeAllObjects];
    }
}

如果它保持平稳,我不会太担心它。

于 2013-04-25T02:26:45.120 回答