我认为这个问题很清楚但仍然存在 - 它们之间的区别是什么:
NSString *string = @"Hello world!";
和
NSString *string = [[NSString alloc] initWithString:@"Hello world!"];
如果this已经回复,请告诉我。
答案 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对象。它不会创建任何类型的引用。如果您的对象尚未初始化并保留,则该对象将在运行范围结束时销毁。