2
- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)flag

“字节”不是 const 指针。这是否意味着此方法可能会修改“字节”?

4

2 回答 2

1

您应该假设它可能会发生变异,因为这是签名并且没有文档可以否定它。

所以我的回答是:这是因为SELs 的签名不会/不能改变NSMutableStrings ,所以它被声明为非常量。

以下是一些NSString创建替代方案,它们建议在没有复制的情况下更加安全:

  • CFStringCreateWithBytesNoCopy

  • CFStringCreateWithCStringNoCopy

  • CFStringCreateWithCharactersNoCopy

NSString有问题的 API 也很有可能使用这些。

CF-API 为可变变体提供了更合适的功能,例如CFStringCreateMutableWithExternalCharactersNoCopy,而这些很可能NSMutableString会用到。

于 2011-11-05T13:02:00.557 回答
0

从技术上讲,正如@WTP 所说,没有声明字节,const所以是的,它可以

实际上 - 不。为什么会呢?

您是否在应用程序中看到了错误?

如果您打算偏执,为什么不在调用此方法之前复制字节?

于 2011-11-05T11:00:46.817 回答