Iphone iOS:initWithDelegate消息和编译器警告太多
我的一个视图控制器依赖于几个类,每个类都有一个initWithDelegate:方法。视图控制器在所有情况下都是代理。我在对的所有调用中都收到编译器警告Iphone iOS:initWithDelegate消息和编译器警告太多,iphone,ios,delegation,Iphone,Ios,Delegation,我的一个视图控制器依赖于几个类,每个类都有一个initWithDelegate:方法。视图控制器在所有情况下都是代理。我在对的所有调用中都收到编译器警告 [[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self]; 除了第一个(首先加载谁的头文件) 所有其他的都给出“从yy分配给xx的指针类型不兼容”警告。yy始终是4个类中的第一个 不过,一切都很顺利。那么如何抑制这些警告呢?这是一个LLVM错误吗?听起来好像类型不匹配或者编译器不知道。不要忘记将
[[ONE_OF_FOUR_CLASSES] alloc] initWithDelegate:self];
除了第一个(首先加载谁的头文件)
所有其他的都给出“从yy分配给xx的指针类型不兼容”警告。yy始终是4个类中的第一个
不过,一切都很顺利。那么如何抑制这些警告呢?这是一个LLVM错误吗?听起来好像类型不匹配或者编译器不知道。不要忘记将
init
-方法的签名添加到.h文件中并导入它们。检查它们是否返回id
,以及delegate
是否也是id
类型(至少大多数情况下这是您想要的)
如果这还不清楚,请随意编辑您的问题以包含更多代码。我发现抑制警告的一个简单方法是执行以下操作:
[(四个类中的一个*)[四个类中的一个alloc]initWithDelegate:self]代码>
此强制转换使编译器能够实现+(id)alloc调用的返回值不是'id',而是四个类中的一个类。注意alloc
返回id
,因此编译器不知道[CLASS\u 1 alloc]返回CLASS\u 1类型的对象。它通常正确推断类型,并且不添加警告,但有时不添加警告。我通常的解决办法是投石膏。很难看,但很管用
[(CLASS_1*)[CLASS_1 alloc] initWithDelegate:self];
您应该忽略所有在alloc之后使用强制转换的答案。这显然是错误的做法,尽管我不能告诉您警告的确切原因。我担心调用+alloc返回的id参数是编译器警告的确切原因,因此需要强制转换。谢谢Mike!我的init方法没有返回id,而是返回在中找到的任何类。抱歉,在阅读了其他答案后,我不得不选择Eiko的。。我的initWithDelegate方法没有返回id,但返回的是该方法所在的实际类!不,我现在知道了。。我没有从init方法返回id,而是返回init方法所在的任何类的实例。。