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