所以我的理解是,如果该方法没有实现初始化对象的新实例,那么在方法名称中使用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行为吗?
答案 0 :(得分:5)
方法-initializeInstance
不是问题。这不会被归类为init
系列,因此编译器不会特别对待它。根据{{3}},为了归入init
系列,它必须符合以下规则:
init
,或者必须以init
开头,后跟除小写字母以外的任何字符。 initializeInstance
不符合此规则。init
方法必须返回Obj-C对象。 initializeInstance
也不符合此规则。我相信如果违反此规则会导致编译时错误,而不是简单地不将该方法视为init
。