如果我要重新创建NSURLSession,我将复制块参数传递到这个函数:-
- dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler;
为了进一步说明,如果我正在编写NSURLSession,遵循ARC/Blocks的最佳实践,我是否应该复制传递到上述函数的completionHandler,因为它们被异步调用(可能在堆栈已经出现之后?)
NSURLSession
将自己复制这些块。
所以,不,你不需要复制它们。请注意,如果你选择在完成处理程序上调用copy
,除非你自己保留了对副本的引用,否则ARC会在你"完成"它之后释放副本,这将是在副本被传递给dataTaskWithRequest:completionHandler:
函数之后立即释放的。
而且,只有一个完成处理程序传递给该方法。