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)