我使用此代码拦截类“NSURLConnection”的方法“sendAsynchronousRequest”,并尝试在完成处理程序中执行一些代码。
void (*oldHandler)(id,NSURLResponse*, NSData*, NSError*);
void myHandler(id block, NSURLResponse *response, NSData *data, NSError *error ) {
NSLog( @"myHandler: %@ %@", response, error );
oldHandler( block, response, data, error );
}
…
[object_getClass([NSURLConnection class]) beforeSelector:@selector(sendAsynchronousRequest:queue:completionHandler:)
callBlock:^( NSURLConnection *url, SEL _cmd, id request, NSOperationQueue *queue, id handler ) {
struct _block {
Class isa;
int flags;
int reserved;
void (*invoke)();
} *blockHandler = (__bridge struct _block *)handler;
oldHandler = blockHandler->invoke;
blockHandler->invoke = myHandler;
}];
问题是,如果我在我的应用程序中连续调用了2次“sendAsynchronousRequest”,我将放弃第一次调用,因为“oldHandler”将随着方法的第二次调用而改变。
我尝试将oldHandler添加到NSArray或NSDictionary中以识别“myHandler”方法中的每个调用,但它不起作用。
你知道我的问题的解决方案吗?
由于