Objective-C 内存泄漏混淆

标签 objective-c cocoa

显然 main 方法中的以下内容会导致泄漏:

NSMutableArray *strings = [[NSMutableArray alloc] init];
[strings addObject:@"Hello"];
[strings addObject:@"Howdy"];

return 0;

clang LLVM 报告泄漏。然而,通过 Hillegass 的书,我尝试分析以下代码,它再次没有释放 NSMutableArray 对象:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSMutableArray *array = [[NSMutableArray alloc] init];
NSCalendarDate *now = [[NSCalendarDate alloc] init];

for (int i=0; i < 3; i++) {
    LotteryEntry *newEntry = [[LotteryEntry alloc] init];
    NSCalendarDate *iweeksFromNow = [now dateByAddingYears:0
                                                    months:0
                                                      days:(i*7)
                                                     hours:0
                                                   minutes:0 
                                                   seconds:0];
    [newEntry setEntryDate:iweeksFromNow];
    [array addObject:newEntry];
    [newEntry release];
}

[now release];

for (LotteryEntry *entry in array) {
    NSLog(@"%@", entry);
}


[pool drain];
return 0;

这次没有泄漏报告。我是否遗漏了一些明显的东西?

最佳答案

我不认为你是——静态分析器只是遗漏了它。 array 确实以保留计数 1 结束;如果这条线是

 NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];

然后封闭的自动释放池会处理它,但就目前而言,数组肯定仍在泄漏。

关于Objective-C 内存泄漏混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1984066/

相关文章:

macos - 实现自定义 Cocoa 事件跟踪循环

objective-c - 不能再使用 array.count

ios - 如何确定我的 Mac 中是否安装了 CocoaPods?

objective-c - 由事件触发的 Cocoa URL 书签

ios - Azure 移动服务崩溃

iphone - @synthesize 干扰继承

objective-c - 现有的用于处理人类可读性的 Objective-C 库(并且基于 Cocoa 的 Foundation 框架)?

iphone - 如何为不同的按钮操作设置单一选择器 View

iphone - 如何处理用户数据在不同时间到达的多个推送通知?

objective-c - 识别用户何时关闭窗口(单击关闭按钮时)