我有来自通用工厂类的以下(简化)代码:
- (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。上面的例子是简化的,在实际程序中,有一些限制:
我无法使用ns_returns_retained注释invokeSetup
,因为它是继承的,并且还有其他子类,其中invokeSetup返回+0引用。如果是+1或+ 0只能在运行时检测到。
我无法更改任何方法的名称。
设计就是这样。可能有更好的设计,但这里无法改变。
是否有可能以某种方式告诉ARC在分配(id replacement = ...
)时,参考肯定是+1?
谢谢, 约亨
答案 0 :(得分:0)
请参阅https://stackoverflow.com/a/5833430/1313031了解抑制代码中静态分析器警告的方法
但是,最好的办法是重命名newInstance