因此,我的理解是,如果该方法未实现初始化对象的新实例,则不建议在方法名称中使用 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 行为?
最佳答案
方法-initializeInstance
不是问题。它不属于 init
系列,因此编译器不会特殊对待它。根据the documentation ,为了被归类到init
家族,它必须满足以下规则:
- 选择器的第一个组成部分必须是
init
,或者必须以init
开头,后跟小写字母以外的任何字符。initializeInstance
不符合此规则。 - 此外,
init
方法必须返回一个 Obj-C 对象。initializeInstance
也不符合这个规则。我相信如果违反此规则会导致编译时错误,而不是简单地不将该方法视为init
。
关于objective-c - 在仅单例类的非初始化方法名称中使用 'init' 的 ARC 含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387744/