我正在使用AFNetworking
的{{1}}类与Rails后端进行通信。
创建对象时,我想使用批处理API在服务器上运行多个AFHTTPClient
调用(我正在使用batch_api,以防您想知道)。
很好地扩展API
我正在考虑使用这样的API:
AFHTTPClient
诀窍是覆盖[[[SPRRailsClient] sharedInstance] batchOperations:^ {
NSMutableURLRequest *request = [[SPRRailsAPIClient sharedClient]
requestWithMethod:@"GET"
path:myPath
parameters:parameters];
AFHTTPRequestOperation *operation = [[SPRRailsAPIClient sharedClient]
HTTPRequestOperationWithRequest:request
success:nil
failure:nil];
}];
(我的SPRRailsClient
子类),以便在AFHTTPClient
块内调用requestWithMethod:path:parameters:
和HTTPRequestOperationWithMethod:success:failure:
时不同的方式(排队事物,或重新运行batchOperations
的不同子类。
这种设计的巧妙之处在于它允许我保留现有代码并仅将其包装在块中,以便在“批处理模式”下执行某些调用。
我的问题是:如何检测从块调用方法?我需要AFOperation
来检测它,并且:
requestWithMethod:path:parameters:
块调用,则表现方式不同。batchOperations
块调用,请致电batchOperations
。我知道向super
添加另外两种方法会更简单,但我认为这看起来更好。
另外,我认为这是可能的,因为SPRRailsClient
动画的一些方法在从动画块中调用时以不同的方式运行,而UIView
的{{1}}可能正在做某事类似的。
答案 0 :(得分:1)
我能想到的唯一方法是将batchOpperations块排入命名队列,然后在执行块时检查队列名称。这看起来像是:
在.m文件的顶部或您的方法中,可以正常工作。
static dispatch_queue_t myQueue;
然后在batchOpperations中,
if (!myQueue){
myQueue = dispatch_queue_create("com.mydomain.myapp.myqueue", NULL);
}
dispatch_async(myQueue, batchOpperation);
然后在调用sharedClient方法时,检查队列:
if ([[NSString stringWithCString:dispatch_queue_get_label(dispatch_get_current_queue()) encoding:NSUTF8StringEncoding] isEqualToString:@"com..."]){
something....
}
else{
[super ??];
}