NSString*s = @"string"和NSString*s = [[NSString alloc] initWithString:@"string"]之间有什么区别?

daL*_*ard 1 cocoa objective-c

我认为问题很清楚但仍然存在 - 有什么区别:

NSString *string = @"Hello world!";
Run Code Online (Sandbox Code Playgroud)

NSString *string = [[NSString alloc] initWithString:@"Hello world!"];
Run Code Online (Sandbox Code Playgroud)

如果已经回答了,请告诉我.

X S*_*ash 11

NSString *string = [[NSString alloc] initWithString:@"Hello world!"];
Run Code Online (Sandbox Code Playgroud)

根据可可命名约定,您可以使用名称以"alloc","new","copy"或"mutableCopy"开头的方法创建对象.这意味着您拥有上面的字符串,因此您有责任释放该对象.

NSString *string = @"Hello World";
Run Code Online (Sandbox Code Playgroud)

上面的行是一个字符串文字/常量,你不分配它或释放它.您不拥有此对象.

  • 实际上在这种情况下,由于编译器"智能",实际上没有区别.字符串常量具有非常大的引用计数(MAXINT),编译器将第二个示例与第一个示例相同. (4认同)