2

因此,我的理解是,如果该方法没有实现初始化对象的新实例,则不建议在方法名称中使用 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 行为?

4

1 回答 1

5

方法-initializeInstance不是问题。这并没有被归入该init家族,因此编译器不会对其进行特殊处理。根据文档,要归入init家族,必须满足以下规则:

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