我很困惑,你能告诉我哪一个更好,为什么?
我在某处读到这两者都用于分配和初始化。有人告诉我,你不能像newWithString和所有其他类似的东西,但当我尝试在Xcode然后它没有给我错误
NSString *AddEmail =[[NSString alloc]initWithString:@"Add Email"];
NSString *AddEmail =[NSString new];
两者都会以同样的方式运作吗?
提前谢谢
答案 0 :(得分:3)
[[SomeClass alloc] init]
会得到与[SomeClass new]
相同的结果。新的实现为
+ (id) new
{
return [[self alloc] init];
}
你使用的newWithString
方法给出了一个非常明确的警告:“找不到类方法+newWithString
”,所以即使你编译代码,它也会在这一行上失败。 (除非您在NSString
上声明了一个类别。)
我倾向于选择[[alloc] init]
,因为你可以根据你选择的init方法分配一个对象然后选择如何初始化它的变量。
答案 1 :(得分:1)
+[NSString new]
只返回一个空的,不可变的字符串。
相当于[[NSString alloc] init]
。
你的例子不一样。如果我正确地猜测你的意图,NSString * AddEmail = @"Add Email";
将是你需要写的全部内容。在此示例中,您不需要使用+alloc
,-initWithString:
,+stringWithString:
等,因为@"Add Email"
已经是NSString
。
[[TYPE alloc] init]
和[TYPE new]
相同(除非被覆盖)。你选择哪个是你的偏好。我更喜欢[TYPE new]
,因为它更短,并且无论何时创建“新”对象都不需要分离(或发音)alloc / init消息链。