Ios 绘图时临时生成中的崩溃问题

Ios 绘图时临时生成中的崩溃问题,ios,core-graphics,Ios,Core Graphics,我在以下代码中面临崩溃问题(仅在特别构建中) 崩溃日志显示以下图片: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x10000008 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libobjc.A.dylib

我在以下代码中面临崩溃问题(仅在特别构建中)

崩溃日志显示以下图片:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x10000008
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x39f535b0 objc_msgSend + 16
1   CoreGraphics                    0x3237c3ec CGColorRetain + 12
2   CoreGraphics                    0x3237c592 CGGStateSetStrokeColor + 38

该代码在开发环境中(在模拟器和设备上)运行良好。有什么理论吗?我在ARC下工作。

快速猜测:
self.delegate
init
中未设置为
nil
,这会导致在随机内存位上调用
CGColor


更详细地说:在开发构建期间,对象变量往往都设置为友好的
nil
值。当您进行发布构建时,情况并非如此。这样的崩溃很可能不是初始化为
nil

它几乎可以在任何地方;因为对象变量“某处”指向随机内存位


您可以尝试Xcode中的分析工具,看看它是否能够识别任何内容。除此之外,您还必须从发生崩溃的对象通过其父对象向后工作,并检查所有内容是否已正确初始化。

问题在于对象保留和释放—这是由ARC处理的。显然,ARC仍然存在一些问题,特别是UIColor->CGColor。这里解释了这个问题:

我将以下行更改为代码:

CGContextSetLineWidth(context, strokeWidth);
CGContextSetStrokeColorWithColor(context, strokeColor);
对此,它现在正在发挥作用:

CGContextSetLineWidth(context, self.delegate.strokeWidth);
CGContextSetStrokeColorWithColor(context, self.delegate.strokeColor.CGColor);
CGContextSetLineWidth(context, self.delegate.strokeWidth);
CGContextSetStrokeColorWithColor(context, self.delegate.strokeColor.CGColor);