问题
I'm making an iOS app that continuously takes two pictures and does post processing on them, then displays it in UI. The only way I was able to capture two pictures synchronously was by using recursion inside the completionHandler of captureStillImageAsynchronouslyFromConnection
function in AVCaptureStillImageOutput
. The app eventually crashes after taking around 30 photos, here is the crash log for it:
Date/Time: 2017-05-18 14:06:38.5714 -0400
Launch Time: 2017-05-18 14:06:22.1703 -0400
OS Version: iPhone OS 10.3.1 (14E304)
Report Version: 104
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x000000018c3b3260 semaphore_wait_trap + 8
1 libdispatch.dylib 0x000000018c2a15e8 _os_semaphore_wait + 24
2 libdispatch.dylib 0x000000018c2a0ca0 _dispatch_semaphore_wait_slow + 140
3 Camera-oxilight 0x00000001000f5c14 0x1000f0000 + 23572
4 UIKit 0x000000019353b0ec -[UIApplication sendAction:to:from:forEvent:] + 96
5 UIKit 0x000000019353b06c -[UIControl sendAction:to:forEvent:] + 80
6 UIKit 0x00000001935255e0 -[UIControl _sendActionsForEvents:withEvent:] + 440
7 UIKit 0x0000000193542ce4 -[UIControl touchesBegan:withEvent:] + 312
8 UIKit 0x000000019353a258 -[UIWindow _sendTouchesForEvent:] + 1948
9 UIKit 0x0000000193535804 -[UIWindow sendEvent:] + 3192
10 UIKit 0x0000000193506418 -[UIApplication sendEvent:] + 340
11 UIKit 0x0000000193cfff64 __dispatchPreprocessedEventFromEventQueue + 2400
12 UIKit 0x0000000193cfa6c0 __handleEventQueue + 4268
13 UIKit 0x0000000193cfaaec __handleHIDEventFetcherDrain + 148
14 CoreFoundation 0x000000018d385424 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
15 CoreFoundation 0x000000018d384d94 __CFRunLoopDoSources0 + 540
16 CoreFoundation 0x000000018d3829a0 __CFRunLoopRun + 744
17 CoreFoundation 0x000000018d2b2d94 CFRunLoopRunSpecific + 424
18 GraphicsServices 0x000000018ed1c074 GSEventRunModal + 100
19 UIKit 0x000000019356b130 UIApplicationMain + 208
20 Camera-oxilight 0x00000001000f8618 0x1000f0000 + 34328
21 libdyld.dylib 0x000000018c2c159c start + 4
Thread 1:
0 libsystem_kernel.dylib 0x000000018c3d1a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x000000018c497274 _pthread_wqthread + 1260
2 libsystem_pthread.dylib 0x000000018c496d7c start_wqthread + 4
Thread 2:
0 libsystem_pthread.dylib 0x000000018c496d78 start_wqthread + 0
Thread 3:
0 libsystem_pthread.dylib 0x000000018c496d78 start_wqthread + 0
Thread 4 name: com.apple.uikit.eventfetch-thread
Thread 4:
0 libsystem_kernel.dylib 0x000000018c3b3224 mach_msg_trap + 8
1 libsystem_kernel.dylib 0x000000018c3b309c mach_msg + 72
2 CoreFoundation 0x000000018d384e88 __CFRunLoopServiceMachPort + 192
3 CoreFoundation 0x000000018d382adc __CFRunLoopRun + 1060
4 CoreFoundation 0x000000018d2b2d94 CFRunLoopRunSpecific + 424
5 Foundation 0x000000018ddccd64 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6 Foundation 0x000000018ddedb34 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7 UIKit 0x0000000193ef55f8 -[UIEventFetcher threadMain] + 136
8 Foundation 0x000000018deca2c8 __NSThread__start__ + 996
9 libsystem_pthread.dylib 0x000000018c49975c _pthread_body + 240
10 libsystem_pthread.dylib 0x000000018c49966c _pthread_body + 0
11 libsystem_pthread.dylib 0x000000018c496d84 thread_start + 4
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x000000000000000e x1: 0x0000000000008433 x2: 0x0000000000000028 x3: 0x0000000000000030
x4: 0x000000000000060f x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x00000000000000e0
x8: 0x0000000000000000 x9: 0x0000000080001200 x10: 0xffffffffffffffff x11: 0x0000000000000000
x12: 0x00000001b5c9da4c x13: 0x000000000000006a x14: 0x0000000000000001 x15: 0x0000000000000881
x16: 0xffffffffffffffdc x17: 0x0000000000000000 x18: 0x0000000000000000 x19: 0x000000017008ff88
x20: 0x000000017008ff50 x21: 0xffffffffffffffff x22: 0x0000000111e02aa0 x23: 0x0000000111e02aa0
x24: 0x000000017400ec30 x25: 0x0000000000000000 x26: 0x00000001940448d1 x27: 0x0000000000000001
x28: 0x0000000174051c40 fp: 0x000000016fd0d7e0 lr: 0x000000018c2a15e8
sp: 0x000000016fd0d7d0 pc: 0x000000018c3b3260 cpsr: 0x60000000
Binary Images:
0x1000f0000 - 0x10011ffff Camera-oxilight arm64 <e7b2ec7f7ae531669038395b0b628ed5> /var/containers/Bundle/Application/1FC949F0-FBD1-4502-A2CC-E9EE5009BC03/Camera-oxilight.app/Camera-oxilight
0x100194000 - 0x1001c7fff dyld arm64 <a63e8b89c75a3115b54b1f2f469f676a> /usr/lib/dyld
0x10021c000 - 0x1002bffff GPUImage arm64 <60950acd64553c05b59f66be8c6daee6> /var/containers/Bundle/Application/1FC949F0-FBD1-4502-A2CC-E9EE5009BC03/Camera-oxilight.app/Frameworks/GPUImage.framework/GPUImage
0x18bdb8000 - 0x18bdb9fff libSystem.B.dylib arm64 <6d9ab1f5df1b36d89fd5675936e3da5e> /usr/lib/libSystem.B.dylib
0x18bdba000 - 0x18be0ffff libc++.1.dylib arm64 <4d91c4d8858339c7ae2b3716d1f5e0fc> /usr/lib/libc++.1.dylib
0x18be10000 - 0x18be2cfff libc++abi.dylib arm64 <5615fb6378773e82a20d5d0727a6132e> /usr/lib/libc++abi.dylib
0x18be30000 - 0x18c20dfff libobjc.A.dylib arm64 <64c3c5a56c7a30c39ff4a3ec74426cf4> /usr/lib/libobjc.A.dylib
0x18c20e000 - 0x18c212fff libcache.dylib arm64 <f507d09bab2d343c9b9c53a05986909b> /usr/lib/system/libcache.dylib
0x18c213000 - 0x18c21efff libcommonCrypto.dylib arm64 <0bd3d4cb2d803c6caf1d09e54e8dc705> /usr/lib/system/libcommonCrypto.dylib
0x18c21f000 - 0x18c222fff libcompiler_rt.dylib arm64 <c2952c9143233a30bbad9ffd3535c47c> /usr/lib/system/libcompiler_rt.dylib
0x18c223000 - 0x18c22afff libcopyfile.dylib arm64 <ee8e1650db9b3a57b3e517677ef1da49> /usr/lib/system/libcopyfile.dylib
0x18c22b000 - 0x18c28cfff libcorecrypto.dylib arm64 <1662015f100e3fab8573f40889935a98> /usr/lib/system/libcorecrypto.dylib
0x18c28d000 - 0x18c2bcfff libdispatch.dylib arm64 <46e0cb2039333474ba7b47b131153bd5> /usr/lib/system/libdispatch.dylib
0x18c2bd000 - 0x18c2c1fff libdyld.dylib arm64 <649eb4fd79bf30869584b3ec86b6bcbc> /usr/lib/system/libdyld.dylib
0x18c2c2000 - 0x18c2c2fff liblaunch.dylib arm64 <985c8570c8603f8886372c8fe4843f08> /usr/lib/system/liblaunch.dylib
0x18c2c3000 - 0x18c2c8fff libmacho.dylib arm64 <3fdc8b3ebe27315aa71cadf73b0e0642> /usr/lib/system/libmacho.dylib
0x18c2c9000 - 0x18c2cafff libremovefile.dylib arm64 <7e353a2221703ccd99c8bb04a0bdc3dd> /usr/lib/system/libremovefile.dylib
0x18c2cb000 - 0x18c2e2fff libsystem_asl.dylib arm64 <2f456d47db4937c5aa3dee82ab2550ee> /usr/lib/system/libsystem_asl.dylib
0x18c2e3000 - 0x18c2e3fff libsystem_blocks.dylib arm64 <373b4d279e6432d5b718ec5b71aebfc4> /usr/lib/system/libsystem_blocks.dylib
0x18c2e4000 - 0x18c360fff libsystem_c.dylib arm64 <d31511075c1b38bcbc5198a7f40447b5> /usr/lib/system/libsystem_c.dylib
0x18c361000 - 0x18c365fff libsystem_configuration.dylib arm64 <1db4aaed5fdc3cd592a52f7358d1c666> /usr/lib/system/libsystem_configuration.dylib
0x18c366000 - 0x18c36bfff libsystem_containermanager.dylib arm64 <15235799c22434b78bfd0f93cdc2c9dc> /usr/lib/system/libsystem_containermanager.dylib
0x18c36c000 - 0x18c36dfff libsystem_coreservices.dylib arm64 <31d817e729333cd6be4695ade5abf990> /usr/lib/system/libsystem_coreservices.dylib
0x18c36e000 - 0x18c386fff libsystem_coretls.dylib arm64 <099dd5a82bed308882bc1782787b23cc> /usr/lib/system/libsystem_coretls.dylib
0x18c387000 - 0x18c38dfff libsystem_dnssd.dylib arm64 <58d80a29aee7360ab16718545b8102a2> /usr/lib/system/libsystem_dnssd.dylib
0x18c38e000 - 0x18c3b1fff libsystem_info.dylib arm64 <d0d5a77de46631fca60abd5313794ef1> /usr/lib/system/libsystem_info.dylib
0x18c3b2000 - 0x18c3d6fff libsystem_kernel.dylib arm64 <2ccf4db33c323a68b05942b8375b90c2> /usr/lib/system/libsystem_kernel.dylib
0x18c3d7000 - 0x18c403fff libsystem_m.dylib arm64 <d2b0172418503909a26678ae48b1269c> /usr/lib/system/libsystem_m.dylib
0x18c404000 - 0x18c41ffff libsystem_malloc.dylib arm64 <44978732283439fc92fff8e3ab817123> /usr/lib/system/libsystem_malloc.dylib
0x18c420000 - 0x18c479fff libsystem_network.dylib arm64 <e59c5c150b41309481d185ca548ec114> /usr/lib/system/libsystem_network.dylib
0x18c47a000 - 0x18c483fff libsystem_networkextension.dylib arm64 <4d2d53bd1d0133209b896e201160a682> /usr/lib/system/libsystem_networkextension.dylib
0x18c484000 - 0x18c48efff libsystem_notify.dylib arm64 <fb43e04c8d8e3001bd73370115b6abd4> /usr/lib/system/libsystem_notify.dylib
0x18c48f000 - 0x18c495fff libsystem_platform.dylib arm64 <021e2b400d1b36f1927cd8b9ef5771ff> /usr/lib/system/libsystem_platform.dylib
0x18c496000 - 0x18c49ffff libsystem_pthread.dylib arm64 <ec957ca38cdb3ff39a675b484d59d580> /usr/lib/system/libsystem_pthread.dylib
0x18c4a0000 - 0x18c4a3fff libsystem_sandbox.dylib arm64 <1a659aa7dc7f34d988fda8e46bbd67d6> /usr/lib/system/libsystem_sandbox.dylib
0x18c4a4000 - 0x18c4abfff libsystem_symptoms.dylib arm64 <29eb26c4ca5c3bd0aaf1f8bd8ce2e600> /usr/lib/system/libsystem_symptoms.dylib
0x18c4ac000 - 0x18c4befff libsystem_trace.dylib arm64 <a42d46c7e3463233b75873d1e3ac2267> /usr/lib/system/libsystem_trace.dylib
0x18c4bf000 - 0x18c4c4fff libunwind.dylib arm64 <0963fc28375630e68ccd844e4f48d1b2> /usr/lib/system/libunwind.dylib
0x18c4c5000 - 0x18c4c5fff libvminterpose.dylib arm64 <acccc912f98833088c662f78ec126fe2> /usr/lib/system/libvminterpose.dylib
0x18c4c6000 - 0x18c4ecfff libxpc.dylib arm64 <9bf3e86d19f1318a9b1906a2681cf234> /usr/lib/system/libxpc.dylib
0x18c4ed000 - 0x18c702fff libicucore.A.dylib arm64 <8784ed7062a139ad9c768ed801bb5c8f> /usr/lib/libicucore.A.dylib
0x18c703000 - 0x18c714fff libz.1.dylib arm64 <76ea48b2d8053291891a800d76088c09> /usr/lib/libz.1.dylib
0x18d2aa000 - 0x18d62bfff CoreFoundation arm64 <106dcfdae2ac31b9af16e54e3fdb49be> /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
0x18d62c000 - 0x18d63cfff libbsm.0.dylib arm64 <e663bf7a74f43aad9f86229b0b29f376> /usr/lib/libbsm.0.dylib
0x18d63d000 - 0x18d63dfff libenergytrace.dylib arm64 <6ec005a9a0a931da96fff946b027ca37> /usr/lib/libenergytrace.dylib
0x18d63e000 - 0x18d6b9fff IOKit arm64 <04198d723e7f3834914ae5869c25e65c> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x18d6ba000 - 0x18d6dafff libMobileGestalt.dylib arm64 <648fed3bf8af3ccdbd24e5c65e81ceb5> /usr/lib/libMobileGestalt.dylib
0x18d6db000 - 0x18d7c4fff libxml2.2.dylib arm64 <29f6e338c1f13348970811ca0f0fe293> /usr/lib/libxml2.2.dylib
0x18d7c5000 - 0x18d85ffff Security arm64 <2423134e64f939aba8368d62495f8197> /System/Library/Frameworks/Security.framework/Security
0x18d860000 - 0x18d8cbfff SystemConfiguration arm64 <e8aaab6905853f7e97fb492185cf20be> /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration
0x18d8cc000 - 0x18d9dcfff libsqlite3.dylib arm64 <f1a568e393d531f6af5e1edb816cdab2> /usr/lib/libsqlite3.dylib
0x18d9dd000 - 0x18dd51fff CFNetwork arm64 <7074b3e719d23257b4cd53899121f5c8> /System/Library/Frameworks/CFNetwork.framework/CFNetwork
0x18dd52000 - 0x18dd5ffff libbz2.1.0.dylib arm64 <64376e53acd732f3b5c85ee50b4f01c1> /usr/lib/libbz2.1.0.dylib
0x18dd60000 - 0x18dd78fff liblzma.5.dylib arm64 <7b9227fb2acb3feda1bffd6427b92fd5> /usr/lib/liblzma.5.dylib
0x18dd79000 - 0x18dd93fff libCRFSuite.dylib arm64 <7c6afb4c2fb13be9a84cf6d72ce823d8> /usr/lib/libCRFSuite.dylib
0x18dd94000 - 0x18ddbdfff libarchive.2.dylib arm64 <d8f6218802123a0ca0ec0d922a65c9a6> /usr/lib/libarchive.2.dylib
0x18ddbe000 - 0x18ddbffff liblangid.dylib arm64 <c78b76c300b036c6852e9ff59b9b5e0a> /usr/lib/liblangid.dylib
0x18ddc0000 - 0x18e08ffff Foundation arm64 <73ff2b76d90f3c90b0108f6e36e3b71f> /System/Library/Frameworks/Foundation.framework/Foundation
0x18e090000 - 0x18e13bfff libBLAS.dylib arm64 <8efc2fffcc8d3817a73da84ffd232d46> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libBLAS.dylib
0x18e13c000 - 0x18e46afff libLAPACK.dylib arm64 <13c0d7676f6a381aa399570bf0142738> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libLAPACK.dylib
0x18e46b000 - 0x18e705fff vImage arm64 <8984ca1dbdd4341593c2532a3f112644> /System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/vImage
0x18e706000 - 0x18e72bfff libvMisc.dylib arm64 <1fc0b5b5a59c3ae78efa0a4124bf69b0> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libvMisc.dylib
0x18e72c000 - 0x18e740fff libLinearAlgebra.dylib arm64 <39992b5d7f8a38e7b46ab952e44aa2f2> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libLinearAlgebra.dylib
0x18e741000 - 0x18e752fff libSparseBLAS.dylib arm64 <b0af26c688c631508453fd8f08cf1d0b> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libSparseBLAS.dylib
0x18e753000 - 0x18e7c8fff libvDSP.dylib arm64 <dab772660509376eb918a2c72163797e> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/libvDSP.dylib
0x18e7c9000 - 0x18e7c9fff vecLib arm64 <6c742a3f1ad83395a1a5f3fc1abd56f8> /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/vecLib
0x18e7ca000 - 0x18e7cafff Accelerate arm64 <166a50b815443ce89269964414cfd7b2> /System/Library/Frameworks/Accelerate.framework/Accelerate
0x18e7cb000 - 0x18ed0ffff CoreGraphics arm64 <f8a6e0de80b23cb8b41654b953606846> /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
0x18ed10000 - 0x18ed24fff GraphicsServices arm64 <93b597044b5234749061bb64ddf8adae> /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices
0x18ed25000 - 0x18ed72fff AppSupport arm64 <b9af4ec39608345594622765e98d4f8f> /System/Library/PrivateFrameworks/AppSupport.framework/AppSupport
0x18ed73000 - 0x18eea0fff MobileCoreServices arm64 <d07c54225af93b6289780c72418e3c9f> /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices
0x18eea1000 - 0x18ef02fff BaseBoard arm64 <7aa95ea0660f325db0c7e793a3193cc5> /System/Library/PrivateFrameworks/BaseBoard.framework/BaseBoard
0x18ef03000 - 0x18ef12fff AssertionServices arm64 <4cef0d85a60b329e858109f9638abd7c> /System/Library/PrivateFrameworks/AssertionServices.framework/AssertionServices
0x18ef13000 - 0x18ef40fff BackBoardServices arm64 <322bd4e181fa3e77b99133e48e785e6c> /System/Library/PrivateFrameworks/BackBoardServices.framework/BackBoardServices
0x18ef41000 - 0x18ef44fff MobileSystemServices arm64 <97a4c37c60c337a88892f73e772573da> /System/Library/PrivateFrameworks/MobileSystemServices.framework/MobileSystemServices
0x18ef45000 - 0x18ef94fff FrontBoardServices arm64 <49204359a9843dd8ad769c64bc8f468f> /System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices
0x18ef98000 - 0x18efccfff SpringBoardServices arm64 <d573996d93083f05bf72c1ab6e9a64a1> /System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices
0x18efcd000 - 0x18efe7fff MobileKeyBag arm64 <f0cc77ecdbbd37b8a31aa6ea6107c2ae> /System/Library/PrivateFrameworks/MobileKeyBag.framework/MobileKeyBag
0x18efe8000 - 0x18eff0fff IOSurface arm64 <419bcf22d97732bd99f6f7bb6b50e133> /System/Library/PrivateFrameworks/IOSurface.framework/IOSurface
0x18eff1000 - 0x18effcfff liblockdown.dylib arm64 <e262bbe5419e3e5ba65b1bbe05144dcf> /usr/lib/liblockdown.dylib
0x18effd000 - 0x18f013fff CrashReporterSupport arm64 <c3b0e870e0ac38d892b690dab53f3306>
It seems that the watchdog timer times out, I'm not exactly sure. Here is the code its executing:
-(void)burstModeCapture : (AVCaptureConnection *) videoConnection : (int) i{//start capturing picture s rapidly and cache them in ram
NSLog(@"time entering: %d", i);
[photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{// NO FLASH FIRST, THEN FLASH
[flash turnOffFlash];
NSLog(@"flash");
if(error)
NSLog(@"%s",[[error localizedDescription] UTF8String]);
CVImageBufferRef cameraFrame = CMSampleBufferGetImageBuffer(imageSampleBuffer);
CVPixelBufferLockBaseAddress(cameraFrame, 0);
Byte *rawImageBytes = CVPixelBufferGetBaseAddress(cameraFrame);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(cameraFrame);
size_t width = CVPixelBufferGetWidth(cameraFrame);
size_t height = CVPixelBufferGetHeight(cameraFrame);
// Do whatever with your bytes
// create suitable color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//Create suitable context (suitable for camera output setting kCVPixelFormatType_32BGRA)
CGContextRef newContext = CGBitmapContextCreate(rawImageBytes, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CVPixelBufferUnlockBaseAddress(cameraFrame, 0);
// release color space
CGColorSpaceRelease(colorSpace);
//Create a CGImageRef from the CVImageBufferRef
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
UIImage *FinalImage = [[UIImage alloc] initWithCGImage:newImage];
CGContextRelease(newContext);
CFRelease(newImage);
imagesArray[2-i] = [FinalImage copy];//append image to array
shootCounter--;
if (shootCounter <= 0) {
[flash turnOffFlash];
shootCounter = NUMSHOTS;
UIImage *output = [self processImages];
output = [imageProcessor rotateImg:output];
output = [UI drawText:@"test" :output : CGPointMake([output size].width/2, [output size].height/2)];
[UI updateUIWithOutput:output];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self burstModeCapture: videoConnection : shootCounter];
});
}
else {
if (inputDevice.torchMode == AVCaptureTorchModeOn){
[flash turnOffFlash];
}
else{
[flash turnOnFlash];//SHOULD BE ON, OFF FOR TESTING PURPOSES
}
[NSThread sleepForTimeInterval: 0.1];
[self burstModeCapture: videoConnection : shootCounter];
}
}];
}
- (IBAction)startCapture:(id)sender { // start capturing process when button is held down
_Capturebtn.userInteractionEnabled = NO;
//initialize semaphore to synchronize two threads
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in [photoOutput connections])
{
for (AVCaptureInputPort *port in [connection inputPorts])
{
if ([[port mediaType] isEqual:AVMediaTypeVideo] )
{
videoConnection = connection;
break;
}
}
if (videoConnection)
{
break;
}
}
//run next code in background thread:
[self shoot: [NSNumber numberWithInteger:NUMSHOTS] : videoConnection]; //capture is done for continous repeat this method
//end of background thread
//run on main thread:
_Capturebtn.userInteractionEnabled = YES;
}
- (void)shoot:(NSNumber *)counter : (AVCaptureConnection *) videoConnection {
int n = [counter intValue];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self burstModeCapture: videoConnection : n];
});
}
It seems that completionHandler defaults to main thread. Again the code works, but fails after a while, any help would be really appreciated!
来源:https://stackoverflow.com/questions/44056179/recursive-callback-call-crashing-app-after-some-iterations-watchdog-error-ios