在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 }];
- 如何在iOS中在后台运行NSURLConnection
- 如何在Swift 2.0中创build一个dispatch_block_t数组?
- 使用GCD的NSOperation,确保所有在同一个线程上
- 是否有必要在GCD下创build一个autorelease池?
- Swift 3:DispatchQueue.main.async {}和DispatcQueue.main.async之间的区别(execute:{})?
- 我们如何在iOS应用程序转到后台时调度Google Analytics事件?
- dispatch_set_target_queue如何工作?
- 主线程在viewDidLoad中的一个并发队列上执行dispatch_async,或者在一个方法内部执行
- 正确的单例模式Objective C(iOS)?