在iOS中创build我自己的完成块

我有一个对象,需要很长时间做一些东西(它从服务器下载数据)。

我怎么写我自己的完成块,以便我可以运行…

[downloader doSomeLongThing:^(void) { //do something when it is finished }]; 

我不知道如何将这个块保存在下载器对象中。

您可以复制块,然后调用它:

 typedef void (^CallbackBlk)(); @property (copy) CallbackBlk cb; - (void)doSomething:(CallbackBlk)blk { self.cb = blk; // etc. } // when finished: self.cb(); 

由于您在callback中没有使用任何参数,因此您可以使用标准的dispatch_block_t,因为您只需要在完成长进程时调用它,则无需使用属性来跟踪它。 你可以这样做:

 - (void)doSomeLongThing:(dispatch_block_t)block { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Perform really long process in background queue here. // ... // Call your block back on the main queue now that the process // has completed. dispatch_async(dispatch_get_main_queue(), block); }); } 

然后你就像你指定的那样执行它:

 [downloader doSomeLongThing:^(void) { // do something when it is finished }];