ios 3 上 [NSOperationQueue mainQueue] 的替代方案

发布于 2024-11-07 09:36:41 字数 111 浏览 5 评论 0原文

这些操作在ios3上相当于什么

[NSOperationQueue mainQueue];
[NSOperationQueue currentQueue];

What is the equivalent of these operations on ios3

[NSOperationQueue mainQueue];
[NSOperationQueue currentQueue];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

妥活 2024-11-14 09:36:41

实际上没有与 +currentQueue 等效的东西。对于 +mainQueue,您将使用

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

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

There really wasn't an equivalent for +currentQueue. For +mainQueue you'd call

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

with a method that contained the work that needed to be done on the main thread.

梦罢 2024-11-14 09:36:41

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

像这样的东西可能有效:(未经测试)

@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

There is no other alternative other than rolling your own.

Something like this might work: (untested)

@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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文