使用分配性能工具进行调查显示AVCaptureSessions正在分配并且从未在BarcodePickerController中发布: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来解决另一个错误,其中自动聚焦在第二个创建的捕获会话中停止工作(无论是我的一个还是红色激光器)。
我发现自动对焦错误的唯一方法是完全重新创建捕获会话,而不仅仅是启动和停止它们。我可以使用红色激光sdk执行此操作,如上面的选项2所示,但这最终导致我的应用程序在会话之间的一定数量的转换和接收内存警告后被杀死。这是因为没有清理AVCaptureSessions这一事实。
使用选项1时,我没有任何内存警告或泄漏。
如何清理这些任性的AVCaptureSessions?
答案 0 :(得分:0)
RedLaser技术支持已经确认这是他们的SDK 2.X中的一个错误。他们的技术支持和我自己已经确认该错误已在SDK的第3版中修复。