0
是不是像這樣的內存泄漏或其他問題?將視圖控制器作爲參數傳遞給AFNetworking請求是否安全?
- (void) requestAndUpdateView: (UIViewController *) vc {
[afHttpManager POST:....
success:^(....){ [vc doSomething]} ...
...
];
}
是不是像這樣的內存泄漏或其他問題?將視圖控制器作爲參數傳遞給AFNetworking請求是否安全?
- (void) requestAndUpdateView: (UIViewController *) vc {
[afHttpManager POST:....
success:^(....){ [vc doSomething]} ...
...
];
}
不,它不是一個內存泄漏,因爲VC尚未在此範圍內創建的,所以你不應該管理它在它的保留計數。
但是你的代碼揭示了另一個問題:一定要在主線程上執行每一個UI修改,否則你會遇到隨機崩潰。
編輯問及更多的細節:
每一個UI的行動應該在應用程序的主線程中進行。 在Cocoa touch中,您的應用程序已附加到主線程。 應用程序的主事件循環接收UI事件。 使用另一個線程(後臺線程)來改變任何圖形是一個壞主意,因爲UIKit不是線程安全的。
我的猜測是,afHttpManager做它在另一個線程工作,以避免凍結應用程序的UI,因此任何代碼執行的是相同的線程比你afHttpManager上。
謝謝,你能解釋一下UI修改,以及爲什麼隨機崩潰?或者如果應用程序失去焦點到另一個應用程序,這可能會崩潰,然後AFNetworking嘗試調用視圖?有什麼更好的方法來避免它? – 2015-02-07 16:18:14
@ user61152我編輯了我的答案以添加更多詳細信息 – TheSquad 2015-02-07 16:26:35
根據以下答案,成功塊在主隊列上運行,看起來似乎安全嗎? http://stackoverflow.com/questions/17225193/are-afnetworking-success-failure-blocks-invoked-on-the-main-thread – 2015-02-07 16:42:02