1. NSString *myString = @"Hello";

  2. 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top