我認爲這很簡單,但我遇到了很大的問題。如何釋放一個對象正在調用委託函數釋放自己
我有2 UIViewController
,其中一個是「中央」控制器和其他是用於攝像頭解碼條碼。
在中央UIViewController
,我打電話運行條碼:
barCode = [[MyBarCode alloc] init]
[barCode openBarCodeReader];
//[barCode release]; //can't release it here, this cause problem with camera
} //function finish
的MyBarCode
對象將採取程序的控制。首先,它創建一個簡單的視圖的UIViewController
- (void) loadView {
UIView *frame = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[frame setBackgroundColor:[UIColor clearColor]];
self.view = frame;
}
不是啓動和配置條形碼的對象,並用
[self presentModalViewController:barCodeView animated:YES];
啓動相機現在,一段時間後,我已經解僱該控制器
[barCodeView dismissModalViewControllerAnimated:YES];
我用代理功能發送數據,現在這個UIViewController
完成他們的工作,必須被釋放。我試過一些:
發送另一個委託消息。但是,如果我在此代表,程序崩潰做
[barCode release];
,因爲條碼對象仍在運行,需要進入下一指令我可以發送
[self release]
但我不知道它是否工作,並在程序之後會在「中央」UIViewController
去。我可以關閉此AUX
UIViewController
與[self dismissModalViewControllerAnimated:NO];
但同樣,當程序在中央
UIViewController
去。
有人有想法解決這個問題嗎?
**編輯**
也許我找到了答案: 我不會打電話委託等的方法
[theDelegate BarCodeFinish];
但隨着通知調用它。
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarCodeFinish" object:nil];
拳頭情況下,我仍然會運行調用之後的下一個代碼,但在第二,呼叫將運行它完成它裏面的功能之後,我也沒有問題釋放條碼對象。這是最好的方法嗎?
嗡嗡聲..也許我寫了一個錯誤。它看起來像一個C函數。我想要做的只是簡單的:'result = [barCode openBarCodeReader]'然後'[條形碼發佈]'。我不能這樣做,因爲它會打開相機(並且我無法釋放條形碼,因爲它在打開相機之前先到達此行)。當相機解碼某些東西時,它會向條碼對象發送一個功能。現在我想將它返回到中央視圖(或中央對象,是相同的)。我使用委託來發送這些數據。 「中央」可以繼續。但我必須發佈條形碼。如果我發佈條形碼,它會轉到下一行,它會崩潰 – Rodrigo
我想我找到了解決方案。我可以發送'[[NSNotificationCenter defaultCenter] postNotificationName:@「BarCodeFinish」object:nil];'。這將運行在對象之外,我可以釋放它。我不喜歡使用這種GOTO風格......但是,謝謝你的時間。 – Rodrigo
Rodrigo,是不是MyBarCode一種條形碼包裝類?或者它是一個自定義的UIViewController子類? 不是第二個視圖控制器應該管理攝像機,而中央控制器管理第二個視圖控制器並等待其解碼某些東西。代理設計模式通常用於這種情況。如果'MyBarCode'是一個包裝類,*不*讓它設置相機,捕獲代碼......如果不是,你的'openBarCodeReader'應該做什麼? – 2011-07-06 19:59:11