我是新來的可可觸摸,和真正的非託管語言在一起。儘管我對語法有了很好的把握,但我在質疑我是否正確釋放了一個對象。釋放一個對象是否會銷燬該對象?
我有一個創建對象的視圖,
Communication *comm = [[Communication alloc] init];
[comm doSomething];
[comm release];
我知道我有,因爲我撥作銷燬這個對象,它不會自動釋放。
我在對象上調用一個方法,該方法向我的服務器發出並獲取信息。當數據返回時,它會拋出一個我的「消息分派器」響應的事件。我不想摧毀對象,直到它從服務器返回 - 這是我的困惑所在。
- 如果我在進行調用後直接釋放這個對象,它是否會銷燬對象? (我不想這樣做)
- 如何正確地銷燬此對象並將其引發到正在等待的數據之後?這發生在我的
comm
對象上的DataFinishedLoading
事件中。它是否應該摧毀自己,這是否是正確的做法?
調用我的對象的視圖基本上說,創建這個對象,調用這個方法,並且開始你的快樂方式。它不關心它調用方法後會發生什麼 - 無論它是否帶回信息。它只是監聽上的一種方法,以便以後可能會遇到的任何數據。我沒有理由掛在對象的引用上,因爲在我打電話後,我將永遠不會使用同一個實例 - 除了自己清理之外。
是否可以將我的Communication對象設置爲自動完成後自動釋放? – 2011-06-03 15:51:03
@George:你可以做'comm = [[[Communication [alloc] init] autorelease];',並且一旦你離開了你所做的這個方法,這個對象就會被釋放一次(但你不知道什麼時候,並且不需要關心)。你可能的意思是,*我希望物體一旦完成工作就消失。這很棘手。最好的方法是以某種方式告知工作完成(例如通過委託方法),並讓對象的創建者釋放它。但是,一個對象不應該(自我釋放);或者什麼的,如果這就是你的意思。雖然可能,但這是一種糟糕的風格和混亂。 – DarkDust 2011-06-03 15:57:09
在我從視圖中調用對象並在稍後的日期返回數據之後,Communication對象將向我的應用程序委託發信號通知我的服務器通過訂閱發送了某些內容。那時,通信對象已經完成了所有的工作,而且不再需要它 - 至少是那個實例。在那裏發佈它是否合適?或者是你建議的[自我釋放]? – 2011-06-03 16:00:52