我使用的是NSOperationQueue管理HTTP连接(使用ASI-的HTTPRequest)。 由于我有多个意见,并需要有这些不同的观点请求的HTTP连接,我应该尝试在应用程序委托打造全球NSOperationQueue,或者我应该有一个在每个视图? 我不熟悉NSOperationQueue。
我想知道),最好的做法是什么和b)如果没有最好的做法,什么折衷方案如果有的话。
我也尝试投入运行队列中的类(作为属性),我处理服务器连接,但从来没有发射任务。 想不出数字出来,但[队列操作] = 0。如果有人知道解决这个问题,我想这将是把它最好的地方。
我已经通过增加对NSOperationQueue一个类的方法,我认为苹果已经错过了解决这一点; 一个共享操作队列。 我添加此作为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
这样,我也不需要管理一大堆队列,除非我真的需要。 我可以很方便地从我的所有视图控制器共享队列。
我甚至增加了一个类别,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
我给这家个人的偏好是有一个管理所有的HTTP请求单。 然后,每个视图会要求单身,使HTTP调用,传递自己作为一个代表该呼叫,则单手即代表并取消到的NSOperation然后的NSOperation回调一旦调用完成。
如果你已经有了一个指向处理在每个视图/视图控制器连接的一类,没有任何理由,你还需要有一个指针操作队列。
我想你想要做的是一样的东西:A)视图(控制器)手中URL(+数据)服务器处理对象,B)服务器处理对象的创建操作,并把它放在它队列中,只有它有一个指针。
很难找出原因,如果你不提供更多的细节,没有工作。
我强烈建议考虑看看ASIHTTPRequest提供了一个NetworkQueue类来处理这样的任务。 它有几个方便的委托领域,让您注册跟踪进度,知道什么时候下载或上传完成等。