【发布时间】:2015-06-28 00:48:56
【问题描述】:
如您所见,下面的代码并没有做太多(全部注释掉)而不是枚举一组文件,但是,在运行下面启动的函数 40 秒后,我的内存使用量增长到超过 2 GB通过按下 UI 上的按钮。
我可以运行 UI 几个小时,在按下按钮之前,内存使用量不超过 8MB。
鉴于 ARC 已打开,内存占用了什么?
removed original code as the edit below made no differance.
编辑:
尝试了 @autoreleasepool{ dispatch_asyny ... } 以及在 while 周围和 while 循环内的排列,但没有效果。
这是添加并清理了 autorelasepool 的代码
-(void) search{
self.dict = [[NSMutableDictionary alloc] init];
NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:@"/tmp/SeaWall.log"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *bundleRoot = @"/";
NSFileManager *manager = [NSFileManager defaultManager];
NSDirectoryEnumerator *direnum = [manager enumeratorAtPath:bundleRoot];
NSString *filename;
while ((filename = [NSString stringWithFormat:@"/%@", [direnum nextObject]] ) && !self.exit) {
@autoreleasepool {
NSString *ext = filename.pathExtension;
if ([ext hasSuffix:@"so"] || [ext hasSuffix:@"dylib"] ) {
if (filename == nil || [NSURL URLWithString:filename] == nil) {
continue;
}
NSData *nsData = [NSData dataWithContentsOfFile:filename];
if (nsData != nil){
NSString *str = [nsData MD5];
nsData = nil;
[self writeToLogFile:[NSString stringWithFormat:@"%@ - %@", [filename lastPathComponent], str]];
}
}
ext = nil;
} // end autoreleasepool
}
[fileHandle closeFile];
[self ControlButtonAction:nil];
});
}
【问题讨论】: