首页 存档 技术 查看内容

iOS 面试题(九):创建一个可以被取消执行的 block

2018-3-30 13:00 |来自: 互联网 402 0

摘要: 问题 我们知道 block 默认是不能被取消掉的,请你封装一个可以被取消执行的 block wrapper 类,它的定义如下: typedef void (^Block)(); @inte**ce CancelableObject : NSObject - (id)initWithBlock:(Block)block ...

问题

我们知道 block 默认是不能被取消掉的,请你封装一个可以被取消执行的 block wrapper 类,它的定义如下:

typedef void (^Block)();

@inte**ce CancelableObject : NSObject

- (id)initWithBlock:(Block)block;
- (void)start;
- (void)cancel;

@end

|
|
|
|
|
|
|
|
| 思考时间,想好了请往下翻答案。
|
|
|
|
|
|
|
|
|

答案

这道题是从网上看到的,原题是创建一个可以取消执行的 block,我想到两种写法。

方法一:创建一个类,将要执行的 block 封装起来,然后类的内部有一个 _isCanceled 变量,在执行的时候,检查这个变量,如果 _isCanceled 被设置成 YES 了,则退出执行。

typedef void (^Block)();

@inte**ce CancelableObject : NSObject

- (id)initWithBlock:(Block)block;
- (void)start;
- (void)cancel;

@end

@implementation CancelableObject {
  BOOL _isCanceled;
  Block _block;
}

- (id)initWithBlock:(Block)block {
  self = [super init];
  if (self != nil) {
    _isCanceled = NO;
    _block = block;
  }
  return self;
}

- (void)start {
  __weak typeof(self) weakSelf = self;
  dispatch_async(dispatch_get_global_queue(0, 0), 
^{ if (weakSelf) { typeof(self) strongSelf = weakSelf; if (!strongSelf-
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部