pro*_*rmr 5 objective-c nsstring
为什么Objective C提供类NSString和子类NSMutableString而不仅仅提供NSMutableString?NSString不等同于"const NSMutableString"吗?
在C++中,你只有一个字符串类,std :: string,如果你想要一个常量,你可以声明一个const std:string.
我有兴趣知道为什么我不应该只在任何地方使用NSMutableString并且从不打扰NSString?必须有一个理由,或者语言设计师不会同时提供这两个原因.也许它占用更少的存储空间?
很可能,甚至可能的是,只有在字符串不可变时才允许进行优化.
实际上跑步
NSString *A = @"Bob";
NSString *B = @"Bob";
Run Code Online (Sandbox Code Playgroud)
在调试器中立即显示它们都是指向同一字符串的指针.事实上
NSString *C = [NSString stringWithString:@"Bob"];
NSString *D = [A copy];
Run Code Online (Sandbox Code Playgroud)
两者都指向相同的内存地址.与此同时
NSString *E = [NSMutableString stringWithString:@"Bob"];
Run Code Online (Sandbox Code Playgroud)
指向不同的字符串.
所以是的,在某些情况下使用NSStrings更有效.一般来说,cocoa适合返回字符串的新副本而不是编辑过的字符串.但是,我不能说你不应该在任何地方使用可变字符串,但它似乎违反了框架的一般准则.
在我自己的工作中,我倾向于只使用可变变体,我需要直接编辑.除了你需要一个const之外,它只是从一切可变的C/C++风格后退一点,除非你需要可变性,否则一切都是const.
这两个类的原因与您有时使用std :: string有时使用const std :: string的原因相同.但是,与C++不同,Objective-C没有const方法,因此它们将const-non-const-方法分成两个不同的类.在许多核心类中也可以看到这一点,例如NSArray(NSMutableArray),NSDictionary(NSMutableDictionary)等.
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |