0

我有来自通用工厂类的以下(简化)代码:

- (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。上面的例子被简化了,在实际程序中,有几个约束:

  1. 我无法invokeSetup使用 ns_returns_retained 进行注释,因为它是继承的,并且存在其他子类,其中 invokeSetup 返回 +0 引用。如果是+1 或+0 只能在运行时检测。

  2. 我无法更改任何方法的名称。

  3. 设计就是这样。可能有更好的设计,但这里不能改变。

是否有可能在赋值点(id replacement = ...)以某种方式告诉 ARC 引用肯定是 +1?

谢谢,乔臣

4

1 回答 1

0

有关在代码中抑制静态分析器警告的方法,请参阅https://stackoverflow.com/a/5833430/1313031

但是,是的,最好的办法是重命名 newInstance

于 2012-04-12T15:19:36.053 回答