objective-c - 在仅单例类的非初始化方法名称中使用 'init' 的 ARC 含义是什么

标签 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 行为?

最佳答案

方法-initializeInstance不是问题。它不属于 init 系列,因此编译器不会特殊对待它。根据the documentation ,为了被归类到init家族,它必须满足以下规则:

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

关于objective-c - 在仅单例类的非初始化方法名称中使用 'init' 的 ARC 含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13387744/

相关文章:

ios - 我可以从实现文件创建 .xib 吗?

ios - 我想在 objective-c 中使用无填充的 CFB 加密创建 AES 128

ios - Swift 类基本 D.R.Y 原则

ios - 弹出导航后如何从ViewController释放内存

javascript - 如何在 iOS6 上通过浏览器访问 IFA

ios - 无法使模态视图出现在 iPad iOS6 的屏幕中央

iphone - ios :How to compare 2 NSdates with Different formats?

ios - 完善我的 MagicalRecord 导入

ios - 为桌面 Mac 构建和编译 PJSIP

ios - 如何在后台下载图像以在iOS中使用imageView进行设置?