cha*_*yWu 8 cocoa objective-c nsstring
当我alloc
和init
两个NSString
变量比较它们的指针时,它们是相同的.这是一个显示以下内容的片段:
NSString *s1 = [[NSString alloc] initWithString:@"hello world"];
NSString *s2 = [[NSString alloc] initWithString:@"hello world"];
if (s1 == s2) {
NSLog(@"==");
}else {
NSLog(@"!=");
}
Run Code Online (Sandbox Code Playgroud)
为什么s1
和s2
相同?
Ken*_*agh 14
这里有三件事:
首先,您传入的两个相同的字符串文字initWithString:
将具有相同的地址开始.这是对常量数据的明显优化.
其次,当您使用字符串嵌套alloc和init时,运行时执行优化,alloc调用基本上变为无操作.这是使用NSPlaceholderString
该类完成的.这意味着你回到这里的指针将来自initWithString:
,而不是来自alloc.
第三,在引擎盖下,initWithString:
正在调用CFStringCreateCopy
,正如您所知,它具有以下行为:由于此例程用于创建不可变字符串,因此它具有优化.它只是调用CFRetain()
并返回传入的同一个对象.
感谢非常有趣的问题.我玩得很开心.
归档时间: |
|
查看次数: |
1037 次 |
最近记录: |