4
我正在執行一些NSOperation
對象由NSOperationQueue
管理的對象。該代碼還包含使用performSelector:withObject:afterDelay:
的延遲方法調用。performSelector:withObject:afterDelay:在NSOperation內
的問題是,對應的選擇器應被稱爲延遲,是不叫在所有。
讀到this answer to a StackOverflow question後,我猜這是因爲NSOperation
已經完成了,它的線程已經不存在了,「忘記」了對選擇器的預定調用。
我該如何解決這個問題? 如何在NSOperation
內對某個方法進行延遲呼叫?
因爲我對'NSOperationQueue'和甚至更多'GCD'都很陌生,我可以以某種方式使用'NSOperationQueue',當前的'NSOperation'正在執行,作爲調度隊列用GCD延遲發送? – fabb 2011-12-30 17:38:00
上面的代碼不能與'dispatch_get_global_queue'一起使用,但它可以與'dispatch_get_main_queue'一起使用。任何想法爲什麼? – fabb 2012-01-03 15:18:55
我對GCD並不是很瞭解,所以我不完全瞭解排隊到GCD上的保留/釋放過程的後果,但我的猜測是,你的原始問題是由面對你的所有對象NSOperation被釋放。如果您在NSOperation中搜索與使用異步NSURLConnection相關的問題,您將看到與維護指向對象的指針有關的解決方法,以使NSOperation不受「完成」的限制。 – 2012-09-26 21:38:48