Objective-C:从alloc / init和类方法调用创建对象有什么区别?

时间:2012-07-19 17:37:17

标签: objective-c

例如,

  1. NSString *string = [NSString stringWithString:@"a string"];
    
  2. NSString *string = [[NSString alloc] initWithString:@"a string"];
    
  3. 当我们谈论字符串时,通过设置字符串是否有任何区别:

        NSString *string = @"a string";
    

    最后请注意,这不是关于NSString的具体问题。我要求更广泛的所有NSObjects。

1 个答案:

答案 0 :(得分:4)

ARC没有区别,但在此之前存在差异:alloc/init会返回一个项目,其中参考次数至少为release时您需要retain需要它,而class方法返回一个自动释放的项目,如果你想保留它,你需要{{1}}。 ARC编译器知道所有这些,并根据您的所有权规范负责保留/释放。