我有来自通用工厂类的以下(简化)代码:
- (id) invokeSetup: (id) object {
// Just an example, subclasses delegate setup to a component that either returns +0 or +1 references
return objc_msgSend(object, @selector(init));
}
- (id) newInstance {
id object = objc_msgSend([NSString class], @selector(alloc));
id replacement = [self invokeSetup: object];
return replacement;
}
分析器在 上产生警告return replacement:
:
警告:具有 +0 保留计数的对象返回给调用者,其中预期 +1(拥有)保留计数
我不知何故需要告诉分析器返回的引用- invokeSetup
是+1。上面的例子被简化了,在实际程序中,有几个约束:
我无法
invokeSetup
使用 ns_returns_retained 进行注释,因为它是继承的,并且存在其他子类,其中 invokeSetup 返回 +0 引用。如果是+1 或+0 只能在运行时检测。我无法更改任何方法的名称。
设计就是这样。可能有更好的设计,但这里不能改变。
是否有可能在赋值点(id replacement = ...
)以某种方式告诉 ARC 引用肯定是 +1?
谢谢,乔臣