如何解决为什么NSString`initWithBytesNoCopy`采取`void *`而不是`const void *`
我有一个const char *
(或const string&
),我想将其小节附加到NSMutableString
。
我认为我可以做到
// s: const char *
// start,end: size_t
[anNSMutableString appendString:[[NSString alloc]
initWithBytesNoCopy:s+start
length:end-start
encoding:NSUTF8StringEncoding
freeWhenDone:NO]];
这是行不通的,因为initWithBytesNoCopy
中的NSString
按照Apple文档需要void *
:
- (instancetype)initWithBytesNoCopy:(void *)bytes
length:(NSUInteger)len
encoding:(NSStringEncoding)encoding
freeWhenDone:(BOOL)freeBuffer;
另一方面,initWithBytes
取const void *
。因此,如果我将其更改为使用initWithBytes
,则上面的代码将起作用。
问题:为什么NSString
initWithBytesNoCopy
取void *
而不是const void *
?
这是我的思考过程:
- 我认为有充分的理由宣布
initWithBytesNoCopy
代替void *
接受const void *
。 - 我能想到的唯一正当理由是
initWithBytesNoCopy
可能会修改bytes
,或者将来对新创建的NSString
进行的操作可能会修改其内容。- 但是,我看不到
initWithBytesNoCopy
如何/为什么修改bytes
- 我也看不到
NSString
的操作如何修改其内容,因为NSString
是不可变的。
- 但是,我看不到
- 死胡同。我怎么了?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。