之间有什么区别这两种方式的创造NSStrings?
-
27-09-2019 - |
题
NSString *myString = @"Hello";
NSString *myString = [NSString stringWithString:@"Hello"];
我的理解是,使用的方法(1)创建一个指向一个字符串中,被定义为静态存储器(和不可回收)和使用(2)创建一个NSString对象将自动释放.
- 使用的方法(1)坏?
- 有什么重大差异?
- 是否有任何情况下你会想到使用(1)?
- 是否有一个业绩差别?
P.S.我已经搜查了广泛的堆溢出,虽然有问题,就同一主题,他们都没有答案的问题,我已经发布上。
解决方案
作为指 这个答案 串的文字是不可改变的串的对象,并得到他们的地址的编写时间-所以你并不需要创建多个实例同样的文字串期间,运行时间。
NSString *myString = @"Hello";
因此,我们在这里只是分配myString的指串的文字。
NSString *myString = [NSString stringWithString:@"Hello"];
第二线创建使用方便的构造,但我们正在处理的不可改变的对象在这里,它的结果相同的指针的价值以串的文字-所以您得到的结果相同作为中的的第1次变体(虽然可能执行一些额外的方法,呼叫)。
因此它似乎变你提到过这样做,但第2次一个也可以执行一些额外的话。
小样本说明什么样的情况:
NSString* tString = @"lala";
NSString* tString2 = @"lala";
NSString* tString3 = [NSString stringWithString:@"lala"];
NSString* tString4 = [NSString stringWithFormat:@"%@", @"lala"];
NSLog(@"%p %d", tString, [tString retainCount]);
NSLog(@"%p %d", tString2, [tString2 retainCount]);
NSLog(@"%p %d", tString3, [tString3 retainCount]);
NSLog(@"%p %d", tString4, [tString4 retainCount]);
输出:
0xd0418 2147483647
0xd0418 2147483647
0xd0418 2147483647
0x50280e0 1
不隶属于 StackOverflow