为什么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是不可变的。
  • 死胡同。我怎么了?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...