【发布时间】:2013-07-19 00:54:12
【问题描述】:
ARC 转换期间,Xcode 建议更改
NSMutableData *b = [NSMutableData dataWithBytes:[value getMutableData]
length:[value length]];
到
NSMutableData *b = [NSMutableData dataWithBytes:
(__bridge const void *)([value getMutableData])
length:[value length]];
非 ARC 版本运行良好,但 ARC 版本抛出 EXEC_BAD_ACCESS (code=1)。
Value 是具有名为 valueObject 的 NSMutableData 属性的自定义对象。 GetMutableData 是一个返回 valueObject 的访问器。
这是一个展平操作,将b 添加到流中。
有没有我需要调用的版本或免费版本?
【问题讨论】:
-
value是什么对象?[value getMutableData]返回什么? -
NSMutableData 没有定义 getMutableData 方法。您是否添加了一个类别,或者您尝试在哪里使用 mutableBytes 方法?
-
NSData或NSMutableData上没有方法叫getMutableData,那么value怎么可能是NSMutableData呢?如果是的话,你为什么要从中创建 另一个NSMutableData?这是你的真实代码吗? -
当我逐步完成调试过程时,ARC 更改可能是问题的根源,因为代码在 ARC 之前工作。正如我在下面提到的,pre-ARC 在克隆 datawithbytes 中的数据时更加宽容。我改成显式克隆,问题就解决了。
标签: objective-c automatic-ref-counting exc-bad-access