我有一個類instanciate另一個類,並作爲第二類的代表。第二類是「自由」的,並且不被第一類保留。iPhone - 更改委託可能會導致異步調用崩潰?
這第二類異步發送HTTP請求,並聽取他們的反應。
收到響應後,會對其進行解析,並將結果重新打包併發送給其中一個委託方法。一旦委託被調用,第二個類實例將自行釋放。演出結束。
就一定要獲得服務器的答案,在第一類中的dealloc進入(因任何原因),它改變了第二個的委託屬性設爲路線答案applicationdelegate。
但是......改變這種委託屬性的時候,我認爲這是一個機會,HTTP答案是異步可與第一類的dealloc過程中發生碰撞。所以第一堂課會在釋放時收到答案。在這種情況下,第一個班級會收到一個它無法管理的答案(可能會崩潰),第二個班級在調用發送到第一個班之後,永遠不會看到委託人已經更改。
你會如何管理較具體來說這個問題?
下面是過程的模式:
- AppDelegate中創建A1,A2,A3。
- 每個斧創建乙實例對象(B1,B2,B3的是發送HTTP請求),並且每個斧被定義爲在該點Bx的
- 的委託,所有A和B類的實例可以具有他們的生活
- 如果斧實例終止,在BX類可能的答案發送到的appdelegate代替斧實例
最後的解決方案是我打算做的。但是......在B被通知A正在死亡的延遲期間,它可能會將答案發送給A,A和B必須有dinstinct的生命。一個人必須能夠在另一個之前死去。但是......當A死亡時,B必須知道它必須將答案發送給應用程序委託(不能在那裏使用通知,因爲當A實例中的一個實例死亡時,A的任何實例都可以捕獲通知來代替appdelegate)。你也可以看到我的編輯。 – Oliver
@Oliver - 通知分派是同步的。在通知進行過程中,** A **和** B **都不會死亡。 ' - [NSNotificationCenter post ...]方法甚至不會返回,直到所有已註冊的觀察者被調用並完成他們的工作。 – PeyloW