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…),但这是可能的,因为你使用'自我'没有足够的静态信息。