正如你可以看到,下面的心不是代碼做多(全部註釋掉)比不過列舉了一組文件,更多的,我的內存使用量增長超過2 GB 40後運行通過按下UI上的按鈕啓動的功能的秒數。內存泄漏 - 與ARC目標C啓用
我可以運行UI幾個小時,在按下按鈕之前,內存使用量不會超過8MB。
鑑於ARC打開了,內存是什麼?
removed original code as the edit below made no differance.
編輯:
嘗試的是@autoreleasepool{ dispatch_asyny ... }
和排列周圍,同時與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];
});
}
不知道你的循環體是什麼意思。所以我嘗試了以下方法:圍繞'dispatch_async'執行任何操作。在'dispatch_async'裏面,並且封閉了一切也沒做的事。在while循環周圍,它也沒有做什麼。 – Cripto
@Cripto它需要在循環中。循環體是'while'行後括號內的代碼。 – zneak
請看看我的編輯。它似乎沒有按預期工作。謝謝 – Cripto