Il s'agit d'une question triviale de gestion de la mémoire liée aux blocs et je ne suis pas sûr de savoir quand/où fc
devrait être libéré
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);
});
}
Je pense que libérer à (1) serait OK (pas de fuites) mais est-ce vraiment la façon standard de faire les choses ? (libérer un objet dans le bloc que le même objet appelle ??). Je ressens une certaine bizarrerie ici.
Au point (2), c'est également OK, mais seulement parce que le bloc accesseur est appelé de manière synchrone.
À des fins d'apprentissage... et si le bloc accesseur s'appelait de manière asynchrone ? (Un cas imaginaire qui n'est pas nécessaire pour le NSFileCoordinator). fc
un ivar ou est-il possible de le faire en première approche ?
- Toute aide est appréciée
)