各位好,
最近在写一个架构上出了点问题,想要请教一下
问题:
如何在background thread触法一个应在main thread上执行的delegate callback,
且在delegate dealloc的时候,可清掉已注册在main runloop上却还没被执行的callback
问题完整版:
问题是这样的,我写了一个会自行跟服务器抓图的Class A,
实体化后的Object A会运行在他自己开的Thread上,
并且会提供一个delegate callback,把抓到的图丢回给delegate
然后我又写了一个UIView B,并把他注册为Object A的delegate
但是这样一来,如果在B实作的callback里直接把图画到画面上,
就一定得自己在main thread上呼叫一次display画面才会更新(因为在A的thread)
所以我想说,若是Class A在触法delegate的callback的时候,
直接在main thread上触法就好,
于是我就在Class A用了performSelectorOnMainThread方法来触法callback,
但是这样却又会出现一个问题,就是如果某一天我把UIView B杀掉后,
main runloop上却还有来不及被执行的callback的话,就会造成EXC_BAD_ACCESS...
目前我想到的解决的办法
1. 设定performOnMainThread 的 waitUntilDone 为 YES
但是这会block住抓图的thread, 这样另外开thread的意义就不是很大
2. 在UIView B dealloc的时候清掉main runloop上以B为对象的callback
或是Object A dealloc的时候,清掉自己发出且还未执行的callback
google了一个早上,好像没有办法清掉..(要在同个thread才行)
3. 在B实作的callback里面自己呼叫更新UI的方法
其实就是想避免这个
想问一下这该如何达成? 感谢各位前辈的提点