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