Parallel允许您在后台线程上执行选择器,并在选择器执行完毕后调用回调。
以下是一个例子
- (instancetype)init
{
if (self = [super init])
Parallel *parallel = [[Parallel alloc] init];
return self;
}
- (id)doSomethingThatTakesTime
{
return [something thatTakesTime];
}
- (void)someMethod
{
[parallel performSelector:@selector(doSomethingThatTakesTime)
onTarget:self
withCallback:^(id result){
NSLog(@"done: %@", result);
}];
NSLog(@"doing something that takes time...");
}
该程序将记录“执行耗时的操作...完成: ”。
与-[NSThread detachNewThread...]
和-[NSObject performSelectorInBackground...]
不同,Parallel每次在执行选择器时不会创建一个新的线程。以下是它的工作原理
您调用[[Parallel alloc] init]
,这将启动一个后台线程并在该线程上启动一个事件循环。事件循环持续检查事件队列是否有新的事件。
您调用-[Parallel performSelector...]
,这会将一个事件添加到事件队列。
在后台线程上运行的事件循环处理新的事件。与事件关联的选择器被执行,并且关联的回调块在主线程上被调用。
执行完各种选择器后,您调用-[Parallel cancel]
,这将关闭事件循环和后台线程。
您可以将整个内容直接放入项目中,或者您可以使用CocoaPods进行安装。
初始化Parallel对象并启动后台线程和事件循环。
将选择器添加到事件队列。一旦先前添加的所有选择器都已执行,该选择器(sel
)将在后台线程上的target
上执行。一旦此选择器被执行,回调块(callback
)将在主线程上被调用,并且如果有的话,将执行下一个选择器。callback
带有单个参数:由sel
返回的值。
结束事件循环并杀死后台线程。
打开xcodeproj并按Command-U。如果您偏好终端,可以这样做
$ xcodebuild test -project Parallel.xcodeproj -scheme Parallel -destination 'platform=OS X,arch=x86_64'
MIT许可证。详细信息请见./LICENSE
。