-1

我对此感到困惑,您能告诉我哪个更好,为什么?

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

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

      NSString *AddEmail  =[NSString new];

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

先感谢您

4

2 回答 2

3

[[SomeClass alloc] init]将给出与 相同的结果[SomeClass new]。new 被实现为

+ (id) new
{
    return [[self alloc] init];
}

您使用的newWithString方法给出了一个非常明确的警告:“+newWithString找不到类方法”,因此即使您编写代码,它也会在这一行失败。(除非您在 上声明了一个类别NSString)。

我更喜欢[[alloc] init],因为您可以分配一个对象,然后根据您选择的 init 方法选择如何初始化其变量。

于 2013-04-25T06:41:34.523 回答
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 消息链。

于 2013-04-25T08:26:17.917 回答