Objective c __网桥导致执行错误访问

Objective c __网桥导致执行错误访问,objective-c,automatic-ref-counting,exc-bad-access,Objective C,Automatic Ref Counting,Exc Bad Access,在ARC转换期间,Xcode建议更改 NSMutableData *b = [NSMutableData dataWithBytes:[value getMutableData] length:[value length]]; 到 非ARC版本运行正常,但ARC版本抛出EXEC\u BAD\u访问(code=1) Value是具有名为valueObject的NSMutableData属性的自定义对象。GetMu

在ARC转换期间,Xcode建议更改

NSMutableData *b = [NSMutableData dataWithBytes:[value getMutableData] 
                                         length:[value length]];

非ARC版本运行正常,但ARC版本抛出
EXEC\u BAD\u访问(code=1)

Value是具有名为valueObject的NSMutableData属性的自定义对象。GetMutableData是返回valueObject的访问器

这是一个展平操作,正在向流添加
b

我需要打电话给你释放或免费吗

Value是具有名为valueObject的NSMutableData属性的自定义对象。GetMutableData是返回valueObject的访问器

考虑到上面的语句,为什么不创建一个存储访问器返回值的变量呢

NSMutableData *someData = [value getMutableData];

问题在于,您试图将一个可保留对象指针类型转换为另一个可保留对象指针类型

您不需要将getMutableData强制转换为
void*
。您只需要传入一个字节数组

这里有一个更好的解释:

这明确规定了以下内容:

例如,Objective-C对象指针不应转换为 无效*

下面是关于如何使用桥接强制转换的更好解释:

如果我理解正确,您的问题的一些解决方案是,
value
有一个返回
NSMutableData
对象的方法

NSMutableData *b = [NSMutableData dataWithBytes:[[value getMutableData] bytes] 
                                         length:[value length]];

值是什么类型的对象?
[value getMutableData]
返回什么?NSMutableData不定义getMutableData方法。您是否添加了一个类别,或者尝试在哪里使用可变字节方法?在
NSData
NSMutableData
上没有称为
getMutableData
的方法,那么
value
怎么可能是
NSMutableData
?如果是,为什么要从中创建另一个
NSMutableData
?这是您的真实代码吗?当我逐步完成调试过程时,ARC更改可能是问题的根源,因为代码在ARC之前工作。正如我在下面提到的,在用字节克隆datawithbytes中的数据时,预ARC更宽容。我改为显式克隆,问题解决了。西蒙-谢谢你给我指明了正确的方向。在克隆数据方面,非Arc似乎要友善得多。我在我的对象中添加了一个克隆访问器,这就成功了。
NSMutableData *b = [NSMutableData dataWithBytes:[[value getMutableData] bytes] 
                                         length:[value length]];