为什么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;

另一方面,initWithBytesconst void *。因此,如果我将其更改为使用initWithBytes,则上面的代码将起作用。

问题:为什么NSString initWithBytesnoCopyvoid *而不是const void *

这是我的思考过程:

  • 我认为有充分的理由宣布initWithBytesnoCopy代替void *接受const void *
  • 我能想到的唯一正当理由是initWithBytesnoCopy可能会修改bytes,或者将来对新创建的NSString进行的操作可能会修改其内容。
    • 但是,我看不到initWithBytesnoCopy如何/为什么修改bytes
    • 我也看不到NSString的操作如何修改其内容,因为NSString是不可变的。
  • 死胡同。我怎么了?
iCMS 回答:为什么NSString`initWithBytesNoCopy`采取`void *`而不是`const void *`

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1554976.html

大家都在问