目标 c - iOS 3 上的 [NSOperationQueue mainQueue] 的替代方法



ios3上的这些操作的等效物是什么

[NSOperationQueue mainQueue];
[NSOperationQueue currentQueue];

+currentQueue真的没有等价物。 对于 +mainQueue,你会调用

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

使用包含需要在主线程上完成的工作的方法。

除了自己滚动之外,没有其他选择。

这样的东西可能会起作用:(未经测试)

@interface NSOperationQueue(MainQueueAdditions) 
+ (NSOperationQueue *) mainQueue;
@end
@implementation NSOperationQueue(MainQueueAdditions)
+ (NSOperationQueue *) mainQueue {
  static NSOperationQueue *queue = nil;
  if(queue == nil) queue = [[NSMainOperationQueue alloc] init];
  return queue;
}
@end
@interface NSMainOperationQueue : NSOperationQueue {}
@end
@implementation NSMainOperationQueue
- (void) addOperation:(NSOperation *) operation {
  [self queueOperationInternal:operation];
}
- (void) addOperationWithBlock:(void (^)(void))block {
   [self queueOperationInternal:[NSBlockOperation blockOperationWithBlock:block]];
}

- (void) queueOperationInternal:(NSOperation *) operation {
   [[NSRunLoop mainRunLoop] performSelector:@selector(start) target:operation argument:nil order:-[operation queuePriority] modes:[NSArray arrayWithObject:NSRunLoopCommonModes]]; 
}
@end

相关内容

最新更新