问题描述
我有一个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 (将#修改为@)