哪一个更好地分配init或new

时间:2013-04-25 06:32:38

标签: ios

我很困惑,你能告诉我哪一个更好,为什么?

我在某处读到这两者都用于分配和初始化。有人告诉我,你不能像newWithString和所有其他类似的东西,但当我尝试在Xcode然后它没有给我错误

      NSString *AddEmail  =[[NSString alloc]initWithString:@"Add Email"];

      NSString *AddEmail  =[NSString new];

两者都会以同样的方式运作吗?

提前谢谢

2 个答案:

答案 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消息链。