2010-07-08 63 views
1

正確處理我有一個類似的情況: Objective-C: How to use memory managment properly for asynchronous methods異步NSObject的

我有一個異步下載&解析的XML文檔的對象。然後它有一個委託方法將檢索到的數據傳輸給調用者。

我的2個問題是:

我什麼時候釋放數據檢索對象?我上面發佈的鏈接給出了2個答案,一個表示在代表發佈,一個表示發佈立即,這是正確的(或哪個更好,如果兩個答案都是正確的)

我的第二個問題是,什麼是將檢索到的數據傳輸給呼叫者?目前,我有

self.imagesDataSource = [articleImagesParserObject.returnedArray copy]; 

我用副本,因爲,據我所知,這使得可變數組不可變。那是對的嗎?

+0

我應該補充一點,我不是在尋找某人「爲我做作業」,我正在努力學習,請解釋爲什麼事情是錯誤的,以及爲什麼你會以某種方式做事。 – 2010-07-08 07:31:43

回答

0

我要去接你一兩件事情。它可能會開始滾動的球:)

你說

然後它有一個委託方法 傳輸數據它檢索到 呼叫者

- 編輯 -
你是說你發送一條消息給NSURLConnection的的委託。是的,這只是語義,但它更清晰。

你說

我上面貼的鏈接給2個 答案,一個說,在 委託釋放和人說釋放 立即

您鏈接到帖子裏說,如果你用NSThread +detachNewThreadSelector:toTarget:withObject:啓動你的輔助線程,線程將保留你的對象,所以如果你已經完成了它,你可以像通常的做法那樣釋放它。你沒有這樣做。

第二個建議的方法是當您的後臺操作完成時提供回調方法。當你使用NSURLConnection時,它已經爲你提供了回調鉤子,事實上你正在使用它們來返回你下載的數據,這似乎是要走的路。

複製一個可變數組確實會給你一個不可變的副本,它是你自己的 - 所以它應該是self.imagesDataSource = [[articleImagesParserObject.returnedArray copy] autorelease],除非imagesDataSource不保留 - 這將是不規則的。

+0

如果您從未聽說過委託方法,則無法閱讀Apple的文檔。委託模式遍佈全球,「委託方法」一詞在每個使用該模式的類的文檔中。 – Chuck 2010-07-09 00:19:18

+0

我想你可以有一個委託對象,它必然有方法。但考慮一個NSTableView實例;我不能說'我想[obj1 hasBeans]是textShouldBeginEditing的委託方法:,我想[obj78 isVisible]是textShouldEndEditing的委託方法:。不,我可以設置委託對象 - 但僅此而已。此外,OP正在將授權和消息傳遞混爲一談。 – hooleyhoop 2010-07-09 07:28:08

+0

Conflating?你abyssopelagic的迴應是,模糊了它可能包含;-) 言歸正傳儘管 委託方法的任何信息的贅言: http://en.wikipedia.org/wiki/Delegation_pattern http://cocoadevcentral.com/articles /000075.php – 2010-07-09 10:07:41