【发布时间】:2016-01-07 11:06:33
【问题描述】:
在我的代码中,我有一个 APIManager 和它的子类 ArticleAPIManager 在我实现的两个类中 deinit { print("deinit className") }
我试图查看是否会立即释放以下代码:
ArticleManager().fetchArticlesWithParameters(ArticlesParameters.defaultParameters()) { (articlesData, error) -> Void in
print("Done")
}
控制台显示如下:
deinit ArticleAPIManager
deinit APIManager
Done
如果 Manager 之前被释放,完成处理程序如何仍然存在?
func fetchArticleWithParameters<R:xxxProtocol>(parameters:R , completionHandler: ArticleCompletionHandler) {
if let articleURLWithParamsURL = params.endPointURL() {
fetchURL(articleURLWithParameters) { (jsonData, error) -> Void in
guard let jsonData = jsonData else {
completionHandler(articlesData: nil, error: error)
return
}
if let rawArray = jsonData["data"] as? [APIJSON] {
let articles = APIGenericResponceParser<T>().parseArray(rawArray)
completionHandler(articlesData: articles, error:nil)
}
}//fetchURL
}//iflet-NSURL
}
【问题讨论】:
-
你的
fetchArticlesWithParameters看起来怎么样? -
这里缺少你的 api 实现。但通常您的闭包回调由异步 api 捕获以供稍后调用。(例如:调度后)。因此,您的班级首先要删除。当异步 API 触发时,回调执行
-
@AntonBronnikov 我更新了问题
标签: ios swift networking memory-management nsurlsession