- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)flag
“字节”不是 const 指针。这是否意味着此方法可能会修改“字节”?
- (id)initWithBytesNoCopy:(void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding freeWhenDone:(BOOL)flag
“字节”不是 const 指针。这是否意味着此方法可能会修改“字节”?
您应该假设它可能会发生变异,因为这是签名并且没有文档可以否定它。
所以我的回答是:这是因为SEL
s 的签名不会/不能改变NSMutableString
s ,所以它被声明为非常量。
以下是一些NSString
创建替代方案,它们建议在没有复制的情况下更加安全:
CFStringCreateWithBytesNoCopy
CFStringCreateWithCStringNoCopy
CFStringCreateWithCharactersNoCopy
NSString
有问题的 API 也很有可能使用这些。
CF-API 为可变变体提供了更合适的功能,例如CFStringCreateMutableWithExternalCharactersNoCopy
,而这些很可能NSMutableString
会用到。
从技术上讲,正如@WTP 所说,没有声明字节,const
所以是的,它可以
实际上 - 不。为什么会呢?
您是否在应用程序中看到了错误?
如果您打算偏执,为什么不在调用此方法之前复制字节?