對分配性能工具的調查顯示,AVCaptureSessions正在被分配,並且永遠不會在RedLaser SDK中的BarcodePickerController:viewWillAppear中釋放。如何清理在BarcodePickerController中創建的AVCaptureSessions:在RedLaser SDK中的viewWillAppear?
BarcodePickerController *_barcodeScanner = [[BarcodePickerController alloc] init];
[_barcodeScanner viewDidLoad];
//[_barcodeScanner viewWillAppear:NO]; // Option 1.
//[_barcodeScanner viewDidAppear:NO]; // Option 1.
[_barcodeScanner stopScanning];
for (int i = 0; i < 200; i++) {
NSLog(@"Run:%d", i);
//[_barcodeScanner resumeScanning]; // Option 1.
//[_barcodeScanner stopScanning]; // Option 1.
[_barcodeScanner viewWillAppear:NO]; // Option 2.
[_barcodeScanner viewDidAppear:NO]; // Option 2.
[_barcodeScanner viewWillDisappear:NO]; // Option 2.
[_barcodeScanner viewDidDisappear:NO]; // Option 2.
}
//[_barcodeScanner viewWillDisappear:NO]; // Option 1.
//[_barcodeScanner viewDidDisappear:NO]; // Option 1.
[_barcodeScanner viewDidUnload];
[_barcodeScanner release];
背景是我正在用兩個AVCaptureSessions寫一個應用程序。一個是由紅色激光創建和管理的,如上面的示例代碼所示,另一個是由我自己手動創建的。我需要使用上面代碼中顯示的選項2而不是選項1來解決另一個自動對焦停止在第二個創建的捕捉會話中工作的錯誤(無論是我的一個還是紅色激光)。
我發現的自動對焦錯誤的唯一工作是完全重新創建捕捉會話,而不僅僅是啓動和停止它們。我可以用上面的選項2中所示的紅色激光sdk來做到這一點,但是這最終導致我的應用程序在會話之間進行了一定次數的轉換並接收到內存警告後死亡。這是由於AVCaptureSessions沒有被清理的事實。
使用選項1
如何能夠將這些任性AVCaptureSessions進行清理時,我沒有任何內存警告或泄漏?