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

时间:2012-01-27 13:37:03

标签: objective-c cocoa

我认为这个问题很清楚但仍然存在 - 它们之间的区别是什么:

NSString *string = @"Hello world!";

NSString *string = [[NSString alloc] initWithString:@"Hello world!"];

如果this已经回复,请告诉我。

2 个答案:

答案 0 :(得分:11)

NSString *string = [[NSString alloc] initWithString:@"Hello world!"];

每个cocoa作为可可命名约定,您可以使用名称以“alloc”,“new”,“copy”或“mutableCopy”开头的方法创建对象。这意味着您拥有上面的字符串,因此您有责任释放该对象。

NSString *string = @"Hello World";

上面的行是一个字符串文字/常量,你不分配它或释放它。你没有这个对象。

答案 1 :(得分:1)

NSString *string = [[NSString alloc] initWithString:@"Hello World!"];

此代码创建一个强引用,并保留变量。然后它赋值“Hello World!”它。

NSString *string = @"Hello World!";

此代码只是赋值“Hello World!”到NSString对象。它不会创建任何类型的引用。如果您的对象尚未初始化并保留,则该对象将在运行范围结束时销毁。