对于仅用于单一类的非初始化方法名称中使用'init'有什么影响

时间:2012-11-14 21:35:18

标签: objective-c ios ios6 singleton automatic-ref-counting

所以我的理解是,如果该方法没有实现初始化对象的新实例,那么在方法名称中使用init是不可取的。但是,单例类型的情况是什么?如果我做这样的事情:

+ (MyClass*) sharedInstance {

    __block MyClass *sharedInstance = nil;
    static dispatch_once_t once_token;
    dispatch_once(&once_token, ^{
        sharedInstance = [[MyClass alloc] init];
    });

    return sharedInstance;
}

然后有另一种方法:

- (void) initializeInstance {
  // Do some stuff
  // Never call the init method
}

如果我这样做会有额外的保留周期或其他奇怪的ARC行为吗?

1 个答案:

答案 0 :(得分:5)

方法-initializeInstance不是问题。这不会被归类为init系列,因此编译器不会特别对待它。根据{{​​3}},为了归入init系列,它必须符合以下规则:

  1. 选择器的第一个组件必须是init,或者必须以init开头,后跟除小写字母以外的任何字符。 initializeInstance不符合此规则。
  2. 此外,init方法必须返回Obj-C对象。 initializeInstance也不符合此规则。我相信如果违反此规则会导致编译时错误,而不是简单地不将该方法视为init