0

我有一种将图像保存到文档目录的方法。看起来像这样:

+(void)saveImageInDocumentsDirectory:(UIImage *)image withImageName:(NSString *)name { 
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    NSData * binaryImageData = UIImagePNGRepresentation(image);
    [binaryImageData writeToFile:[basePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",name]] atomically:YES];  
}

有没有办法为此添加一个完成块,它将在保存图像时运行?

4

2 回答 2

2

我认为没有完成块。根据文档,返回值表示

返回值 如果操作成功,则返回 YES,否则返回 NO。

对我来说,这意味着该方法会阻塞调用它的线程,直到它完成。如果您的保存需要一些时间,您可以使用 Grand Central Dispatch 在单独的线程中执行操作。当您的方法返回时,您可以调用一个方法用作完成块。寻找dispatch_async,你应该找到很多。

这里也有很多关于 SO 的例子。例如: 处理块、完成处理程序、dispatch_async 与 dispatch_sync

希望这可以帮助!

于 2013-02-10T14:03:15.093 回答
1

您可以向您的方法添加一个表示完成块的附加参数。但是,没有意义。这里涉及的代码都不是异步的。当您调用该saveImageInDocumentsDirectory:withImageName:方法时,当方法返回时,写入已经完成。因此,添加对完成块的支持不会给您带来任何好处。

因此,不要添加对完成块的支持并进行如下调用:

[Whatever saveImageInDocumentsDirectory:someImage withImageName:@"SomeName" completion:^{
    // some completion code
}];

你只需要这样做:

[Whatever saveImageInDocumentsDirectory:someImage withImageName:@"SomeName"];
// some completion code here
于 2013-02-10T18:11:19.033 回答