此代码在 Xcode 6.2 和 6.3 之间没有更改,但包含的行[self alloc]
现在导致错误:
Multiple methods named 'initWithType:' found with mismatched result, parameter type or attributes
@implementation AGNetworkDataRequest
+ (instancetype)networkDataRequestWithType:(AGNetworkDataRequestType)type
{
AGNetworkDataRequest *r = [[self alloc] initWithType:type];//error here
return r;
}
- (id)initWithType:(AGNetworkDataRequestType)type
{
//typical init code
}
//...
如果我 Cmd+单击initWithType:
打电话,我看到了冲突CAEmitterBehavior
,我们的项目中根本没有引用这个对象,但我猜它一定是 iOS 8.3 中的新对象。
如果我改变[self alloc]
to [AGNetworkRequest alloc]
,继承此方法的子类只会返回父对象,这与我们设计此类的方式相反。
有什么方法可以在不更改方法名称的情况下消除冲突(这需要更改整个应用程序中的所有方法调用)?
投射你的分配回报。
[(AGNetworkDataRequest*)[self alloc] initWithType:type];
这将为编译器提供足够的信息来进行调用。如果编译器不知道参数的长度,则调用有可能在运行时失败(并且可能很难调试)。
返回instancetype而不是id应该可以解决这个问题(allocWithZone将自动返回instancetype...),但这可能是因为您使用的是“self”,没有足够的静态信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)