我有一個UITableView的實例,以及一個遵守委託和數據源協議的獨立類。我這樣做,像這樣:Objective-C中的自動釋放和「分配」屬性? (在iPhone上)
SubjectTableViewHandler *handler = [[[SubjectTableViewHandler alloc] init] retain];
tv.delegate = handler;
tv.dataSource = handler;
[handler autorelease];
我不想保持處理程序,伊娃,如果我脫下retain
通話結束時,當autorelease
發生時,它被送到release
,然後添加到池中,這會導致EXC_BAD_ACCESS。所以目前,保留計數爲:
(1) At init: 1
(2) At retain: 2
(3) delegate/datasource properties are 'assign', still 2
(4) At autorelease: 1, now in autorelease pool.
但後來因爲屬性是「分配」,他們將永遠不會被釋放,保留計數將永遠不會打到0,處理器將永遠不會被釋放反正。是否有更有效的方法來完成這項工作,而不是像伊娃那樣維護處理程序並將其發佈到dealloc
方法中?
我想知道爲什麼這是downvoted到-2?將數據源的引用存儲在某個實例變量中*是正確的。 – 2009-04-26 21:36:16
我不能不放棄,但馬克是正確的。我原本可能會誤解,但爲了記錄,我錯誤地低估了這個答案。 (對不起) – amattn 2009-04-29 05:47:28