我一直收到这个崩溃报告,我无法弄清楚问题出在哪里。我知道SIGSEGV
异常类型通常是由于内存管理问题。
崩溃日志,
zException Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x10
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x394db0fc objc_retain + 12
1 Sparkle 0x0012c9d7 -[PhotoAssetView didSelectButton:] (PhotoAssetView.m:44)
2 UIKit 0x3193ada3 -[UIApplication sendAction:to:from:forEvent:] + 91
3 UIKit 0x3193ad3f -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 39
4 UIKit 0x3193ad13 -[UIControl sendAction:to:forEvent:] + 47
5 UIKit 0x31926743 -[UIControl _sendActionsForEvents:withEvent:] + 375
6 UIKit 0x3193a75b -[UIControl touchesEnded:withEvent:] + 595
7 UIKit 0x318fe1a1 _UIGestureRecognizerUpdate + 5529
8 UIKit 0x319359fd -[UIWindow _sendGesturesForEvent:] + 773
9 UIKit 0x319353ab -[UIWindow sendEvent:] + 667
10 UIKit 0x3190ad79 -[UIApplication sendEvent:] + 197
11 UIKit 0x31909569 _UIApplicationHandleEventQueue + 7117
12 CoreFoundation 0x2f14cf1f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
13 CoreFoundation 0x2f14c3e7 __CFRunLoopDoSources0 + 207
14 CoreFoundation 0x2f14abd7 __CFRunLoopRun + 631
15 CoreFoundation 0x2f0b5471 CFRunLoopRunSpecific + 525
16 CoreFoundation 0x2f0b5253 CFRunLoopRunInMode + 107
17 GraphicsServices 0x33def2eb GSEventRunModal + 139
18 UIKit 0x3196a845 UIApplicationMain + 1137
19 Sparkle 0x0040a427 main (main.m:18)
在此方法[PhotoAssetView didSelectButton:]
中,我们使用unsafe_unretained delegate
,
[self.delegate didSelectButtonForPhotoAsset:sender];
任何指针?
答案 0 :(得分:3)
你是否在其他地方强烈提及代表?通常设置一个对象的委托不会创建一个强引用,所以如果你不自己保留它,它将在被调用之前被释放,你会像这样崩溃。
答案 1 :(得分:1)
对委托对象的引用必须是弱类型: unsafe_unretained 或 _weak 。
如果PhotoAssetView委托(可能是ViewController) unsafe_unretained ,那么当引用的对象被释放时,引用不再有效。在这个地址可以是其他对象或垃圾,并向地址发送消息导致异常。
修复:
// SomeViewController.m
- (void) dealloc{
self.photoAssetView.delegate = nil;
}