【问题标题】:How to merge +alloc and -init?如何合并+alloc和-init?
【发布时间】:2012-07-30 17:43:32
【问题描述】:

我正在为 NSObject 的子类编写一个方法,它合并了常见的 NSObject 方法“+alloc”和“-init”。这是为了在创建类的实例时节省时间。

(这个子类也是一个抽象类,就像是子类化NSObject的替代品,所以方法必须兼容子类化。)

对于“make”方法,这是最好的写法吗:

+(id)make
{
    id newObject = [[self.class alloc] init];

    return newObject;
}

如果有更好的方法,会是什么?

谢谢

【问题讨论】:

  • 我假设“在创建类实例时节省时间”是指“节省键入时间”,而不是“节省一些 CPU 周期”,因为类方法方式实际上更慢。
  • 类方法内部,self是类,[self class]是不必要的。这可以简单地写成return [[self alloc] init];

标签: objective-c methods nsobject


【解决方案1】:

更好的方法是使用已经存在的+new :)

【讨论】:

    【解决方案2】:

    您可以使用[self.class new],这与调用[[self.class alloc] init] 相同

    【讨论】:

    • 类方法内部,self类,[self class]是不必要的。
    【解决方案3】:

    我发现new 效果很好。

    SomeObject *object = [SomeObject new];
    

    【讨论】:

      【解决方案4】:

      为了简单:

      id newObject = [[self alloc] init];
      

      您可以将其替换为:

      id newObject = [self new];
      

      但请记住,在许多已定义的对象中,您可以使用其他初始化器,那么您需要使用:

      ...alloc] init...]
      

      结构。

      【讨论】:

        猜你喜欢
        • 2015-06-17
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 2014-02-20
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        相关资源
        最近更新 更多