2009-11-23 62 views
0

我只是好奇,如果爲了表示對象的版本應反映他們的層次結構中的順序相反:Objective-C/Cocoa創建釋放命令?

// Psuedo code 
alloc OBJ_001; 
alloc OBJ_001 > OBJ_002; 
alloc OBJ_001 > OBJ_002 > NSSting; 

release NSString; 
release OBJ_002; 
release OBJ_001; 

我敢肯定它應該(對我來說很有意義),但沒見過在我的學習中至今沒有提到這一點。

加里

回答

1

沒關係。我假定您的意思是OBJ_001擁有OBJ_002擁有NSString實例,並且您擁有所有三個對象(共同擁有NSString OBJ_002和共同擁有OBJ_002OBJ_001)。

做它以相反的順序:

  1. 發佈的NSString實例:什麼也沒有發生,因爲OBJ_002仍然擁有它。
  2. Release OBJ_002:沒有任何反應,因爲OBJ_001仍然擁有它。
  3. 版本OBJ_001:它發佈OBJ_002,它釋放NSString。全部三個dealloc。

做它以相同的順序:

  1. 發佈OBJ_001:它釋放OBJ_002,然後deallocks。 OBJ_002仍然存在,因爲你仍然擁有它。
  2. Release OBJ_002:它釋放NSString,然後deallocks。 NSString仍然存在,因爲你仍然擁有它。
  3. 發佈NSString實例:它將刪除。

無論哪種方式,所有三個實例dealloc。沒有區別。

我更喜歡相反的順序,但這純粹是一種風格選擇。

+0

一個問題是如果你在你的-dealloc方法中有順序依賴關係。總之,在你的-dealloc中沒有順序依賴關係!方法。或者,更好的辦法是開啓GC並完成它(如果目標是Mac OS X)。 – bbum 2009-11-23 17:47:40

0

我不會這麼說,只要你使用它,你可以放開做,只要你想。