Xcode 6.3 / iOS 8.3中的新增内容:使用自分配方便构造函数会导致构build错误

这个代码在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]更改为[AGNetworkRequest alloc] ,则inheritance此方法的子类将仅返回父对象,这与我们devise此类的方式相反。

任何方式来消除冲突,而不改变方法名称(这需要改变整个应用程序的所有方法调用)?

投你的回报。

 [(AGNetworkDataRequest*)[self alloc] initWithType:type]; 

这将给编译器提供足够的信息来进行调用。 如果编译器不知道参数的长度,那么调用在运行时会失败(并且可能很难debugging)。

返回instancetype而不是id应该解决这个问题(allocWithZone会自动返回实例types…),但这是可能的,因为你使用'自我'没有足够的静态信息。

Interesting Posts