Я запускаю на iPhone приложение, которое выполняет следующее действие:
+ (void)performWrite:(NSData *)data {
[data retain];
[data writeToFile:@"WriteTest.tst" atomically:YES];
[[NSFileManager defaultManager] removeItemAtPath:@"WriteTest.tst" error:NULL];
[data release];
}
При работе в Instruments, однако, я вижу утечку при каждом вызове removeItemAtPath:error
со следующим следом внутренней утечки:
9 MyApplication +[StorageUtil performWrite:]
8 Foundation -[NSFileManager removeItemAtPath:error:]
7 Foundation +[NSFilesystemItemRemoveOperation filesystemItemRemoveOperationWithPath:]
6 Foundation -[NSOperation init]
5 CoreFoundation +[NSObject new]
4 CoreFoundation +[NSObject alloc]
Эта трассировка стека предоставляется как источник утечки NSRecursiveLock и объекта _NSOperationData. Поэтому меня интересует, правильно ли я использую метод removeItemAtPath:error:
или действительно есть утечка. Я решил проверить здесь, прежде чем отправлять его на радар.
Обратите внимание, что аргумент data
правильно придерживается цикла сохранения / освобождения вне этого вызова метода. Я не верю, что это источник утечки.