跨视图控制器共享NSOperationQueue?

13 iphone networking http objective-c

我正在使用NSOperationQueue来管理HTTP连接(使用ASI-HTTPRequest).由于我有多个视图并且需要让这些不同的视图请求HTTP连接,我应该尝试在app委托中创建全局NSOperationQueue,还是应该在每个视图中都有一个?我不熟悉NSOperationQueue.

我想知道a)最佳实践是什么,b)如果没有最佳实践,那么权衡是什么.

我确实尝试将操作队列放在类(作为属性)中,我处理服务器连接,但任务从未触发.无法弄明白,但[队列操作] = 0.如果有人知道解决方案,我认为这将是最好的地方.

Pey*_*loW 14

我通过在NSOperationQueue上添加一个类方法来解决这个问题,我认为Apple已经错过了; 共享操作队列.我将此作为NSOperationQueue上的类别添加为:

// NSOperationQueue+SharedQueue.h
@interface NSOperationQueue (SharedQueue)
+(NSOperationQueue*)sharedOperationQueue;
@end

// NSOperationQueue+SharedQueue.m
@implementation NSOperationQueue (SharedQueue)
+(NSOperationQueue*)sharedOperationQueue;
{
  static NSOperationQueue* sharedQueue = nil;
  if (sharedQueue == nil) {
    sharedQueue = [[NSOperationQueue alloc] init];
  }
  return sharedQueue;
}
@end
Run Code Online (Sandbox Code Playgroud)

这样我就不需要管理一大堆队列,除非我真的需要.我可以从所有视图控制器轻松访问共享队列.

我甚至为NSObject添加了一个类别,以便更容易在此共享队列上添加新操作:

// NSObject+SharedQueue.h
@interface NSObject (SharedQueue)
-(void)performSelectorOnBackgroundQueue:(SEL)aSelector withObject:(id)anObject;
@end

// NSObject+SharedQueue.m
@implementation NSObject (SharedQueue)
-(void)performSelectorOnBackgroundQueue:(SEL)aSelector withObject:(id)anObject;
{
  NSOperation* operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                selector:aSelector
                                                                  object:anObject];
  [[NSOperationQueue sharedOperationQueue] addOperation:operation];
  [operation release];
}
@end
Run Code Online (Sandbox Code Playgroud)