Sharing NSOperationQueue across View Controllers?

后端 未结 3 1859
北恋
北恋 2021-01-31 06:06

I\'m using an NSOperationQueue to manage HTTP connections (using ASI-HTTPRequest). Since I have multiple views and the need to have these different views requesting HTTP connect

3条回答
  •  有刺的猬
    2021-01-31 06:42

    I have solved this by adding a class method on NSOperationQueue that I think Apple has missed; a shared operation queue. I add this as a category on NSOperationQueue as this:

    // 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
    

    This way I do not need to manage a whole bunch of queues unless I really need to. I have easy access to a shared queue from all my view controllers.

    I have even added a category to NSObject to make it even easier to add new operations on this shared queue:

    // 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
    

提交回复
热议问题