我正在学习Objective-C。你能告诉我这些NSString声明之间的区别(如果有的话)吗?
NSString *firstString;
firstString = @"First string";
NSString *secondString = [NSString string];
secondString = @"Second string";
答案 0 :(得分:8)
第二个创建两个字符串,并在不使用它的情况下抛出第一个字符串。在这一行:
NSString *secondString = [NSString string];
你正在创建一个新的字符串,它不是很有用,因为它是空的,你将它分配给secondString
。然后,您将不同的字符串(@"Second String"
)分配给secondString
。
没有必要这样做。在任何一种情况下,你都可以写:
NSString *myString = @"MyString";
语法@"Some string here"
被称为字符串文字,它是在代码中指定具有实际值的NSString的简写。
答案 1 :(得分:1)
最终结果没有区别。
正在声明第一个字符串,然后通过字符串文字语法分配一个值(从Xcode 4.4起,您也可以使用NSNumbers
执行此操作。)
第二个被初始化为字符串(空),然后被分配另一个NSString对象。在这种情况下,实际上创建了两个NSString对象,前者[NSString string]
被后者覆盖@"string value"
所以,第一个是nil
开始,然后有一个值。第二个有一个实例化的NSString
对象,然后被覆盖。
最后两个字符串对象是相同的,但显然你在第二种情况下浪费资源。