2

我正在学习Objective-C。你能告诉我这些 NSString 声明之间有什么区别(如果有的话)吗?

NSString *firstString;
firstString = @"First string";

NSString *secondString = [NSString string];
secondString = @"Second string";
4

2 回答 2

8

第二个创建两个字符串,并在不使用它的情况下将第一个扔掉。在这一行:

NSString *secondString = [NSString string];

您正在创建一个新字符串,这并不是真正有用,因为它是空的,并且您将其分配给secondString. 然后,您将不同的字符串 ( @"Second String") 分配给secondString.

没有必要这样做。无论哪种情况,您都可以编写:

NSString *myString = @"MyString";

该语法@"Some string here"称为字符串文字,它是在代码中指定具有实际值的 NSString 的简写。

于 2012-08-21T14:35:09.153 回答
1

最终结果没有区别。

第一个字符串被声明,然后通过字符串文字语法分配一个值(你也可以NSNumbers从 Xcode 4.4 开始执行此操作)。

第二个被初始化为一个字符串(空),然后被分配另一个 NSString 对象。在这种情况下,实际上创建了两个 NSString 对象,前者 -[NSString string]被后者覆盖@"string value"

所以,第一个是nil开始,然后有一个价值。第二个有一个实例化的NSString对象开始,然后被覆盖。

最后两个字符串对象是相同的,但显然你在第二种情况下浪费资源。

于 2012-08-21T14:34:45.770 回答