setImage
怎么办?思路1:采用 performSelector 相关的API:
这么多API,可以采用一个适合的,例如:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
其中 waitUntilDone 后面的BOOL参数。
思路2:利用 线程间通信
// 回到主线程
dispatch_async(mainQueue, ^{
// 追加在主线程中执行的任务
[NSThread sleepForTimeInterval:2]; // 模拟耗时操作
NSLog(@"2---%@",[NSThread currentThread]); // 打印当前线程
self.imgView.image = theImage;
});
NSArray * array =
[NSArray arrayWithObjects: @"first", @"second", nil];
[self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];
SEL aSelector = NSSelectorFromString(@"doSoming:argument2:");
NSInteger argument1 = 10;
NSString *argument2 = @"argument2";
if([self respondsToSelector:aSelector]) {
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]];
[inv setSelector:aSelector];
[inv setTarget:self];
[inv setArgument:&(argument1) atIndex:2];
[inv setArgument:&(argument2) atIndex:3];
[inv performSelector:@selector(invoke) withObject:nil afterDelay:15.0];
}
操作队列 | 区别 |
---|---|
串行队列 | 顺序执行 |
并行队列 | 不顺序执行 |
执行方式 | 区别 |
---|---|
同步执行 | 同步执行意味着不开线程 |
异步执行 | 异步执行意味着要开线程 |
执行方式 \ 操作队列 | 串行队列 | 并行队列 |
---|---|---|
同步 | 不开新线程 | 不开新线程 |
异步 | 开一个新线程 | 开几个新线程 |
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);