这是与块相关的内存管理的一个微不足道的问题,我不确定fc
应该在何时/何地释放
NSFileCoordinator *fc = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
NSError *error = nil;
[fc coordinateWritingItemAtURL:sourceURL
options:NSFileCoordinatorWritingForDeleting
error:&error
byAccessor:^(NSURL *newURL) {
// if error is not nil this block will not be called
NSError *anError = nil;
NSFileManager *fm = [NSFileManager defaultManager];
[fm removeItemAtURL:newURL error:&anError];
dispatch_async(q_main, ^{
// change to the main queue and update the UI
completion(anError);
});
// *** (1) Release here ? ***
// [fc release];
}];
// *** (2) or Release here ? ***
// [fc release]
if (error) {
// change to the main queue and update the UI
dispatch_async(q_main, ^{
completion(error);
});
}
我认为在 (1) 发布就可以了(没有泄漏),但这真的是标准的做事方式吗?(释放同一对象调用的块中的对象??)。我觉得这里有些奇怪。
在 (2) 处,也可以,但只是因为访问器块是同步调用的。
出于学习目的......如果访问器块将被异步调用怎么办?(NSFileCoordinator 不需要的假想情况)在这种情况下,我需要制作fc
一个 ivar 还是作为第一种方法就可以了?
任何帮助表示赞赏
:)