[在线]一个obj-c语法的问题 objective-c 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 show方法签名A和B都一样,为什么编译能正确识别? 你继承了NSObject的类,所以A和B是兄弟关系,重写了NSObject里面的show方法, 你能够找到,但当你编译的时候就冲突,编译出错。。 编译时候show没出错,是mul出错了! A 和 B 的 implementation 应该在不同的.m 文件中 2014-11-22 00:52:52.254 csdn问题[2157:303] [A obj]i : 100.00100012312.123120楼主没有问题的 你这里都没有用到B类, 你可以编译通过吗?我的mac os x10.10.1 + Xcode6不可以哦 用类名替换id类型。我给你写一个简单的例子:@interface TestCounter : NSObject- (TestCounter *)count;@endint main(int argc,char *argv[]){ @autoreleasepool{// id obj = [[A alloc] init];// [obj show];// [obj mul:123.12]; [(id)[TestCounter new] count]; } return 0;}这个例子一样会报同样的错误,这是为什么呢?我取得了一个TestCounter的实例,但是我把它转为了id类型,然后用id类型调用了count方法,此时编译器会遍历所有的可见头的count方法,编译器当然会找到多个定义,因为count方法在NSArray,NSSet等等这些类上也有实现,而且我的TestCounter的count方法返回的是一个TestCounter对象,这和NSArray,NSSet等的count方法返回NSUInteger类型不一样,所以编译器会给你一个异常,注意看这个异常描述:multiple methods named 'count' found with mismatched result, parameter type or attributes.那为什么把NSArray转成id类型调用count方法不会有错呢?因为Foundation框架的所有count方法的返回值都是一个NSUInteger类型,编译器找到的签名自然都是一样的,那我们把TestCounter的count的返回值也改成NSUInteger呢?你可以试试。在这版块待了这么久,很少见有人问OC运行时和编译时的问题 我建议如果OC干得足够深入的情况下(UIKit、CoreGraphics、Quartz等),想要进一步深入理解,才在编译器、运行时上下功夫,理解下断点原理、msg_send实现等。过早发现这些问题反而会影响自己的理解。 谢谢,你的解释比较清楚了,也解释了show的问题! NSMutableDictionary* dic = [NSMutableDictionary dictionary];[dic objectForKey:@"size"] count]我代码中也出现这问题,这些是库方法,该怎么处理 悬赏,求做ios下一简单文件管理器,适合新手练手。 3张图片重叠了,怎么选择中间那张图片 关于iPhone push的疑问 UITableViewController设置背景图片问题 如何在移动网络下保障http请求 ios 如何向服务传数据 ios如何添加富文本编辑器 求共享cocos2d-iphone-3.1.0.zip安装包 求教,ios应用中屏蔽ios8输入预测 关于sdk开发的问题 请教下4和5的适配问题 新人来问个问题~~已崩溃球解救~
12312.123120
楼主没有问题的 你这里都没有用到B类,
我给你写一个简单的例子:@interface TestCounter : NSObject- (TestCounter *)count;@endint main(int argc,char *argv[])
{
@autoreleasepool{
// id obj = [[A alloc] init];
// [obj show];
// [obj mul:123.12];
[(id)[TestCounter new] count];
}
return 0;
}这个例子一样会报同样的错误,这是为什么呢?我取得了一个TestCounter的实例,但是我把它转为了id类型,然后用id类型调用了count方法,此时编译器会遍历所有的可见头的count方法,编译器当然会找到多个定义,因为count方法在NSArray,NSSet等等这些类上也有实现,而且我的TestCounter的count方法返回的是一个TestCounter对象,这和NSArray,NSSet等的count方法返回NSUInteger类型不一样,所以编译器会给你一个异常,注意看这个异常描述:
multiple methods named 'count' found with mismatched result, parameter type or attributes.
那为什么把NSArray转成id类型调用count方法不会有错呢?因为Foundation框架的所有count方法的返回值都是一个NSUInteger类型,编译器找到的签名自然都是一样的,那我们把TestCounter的count的返回值也改成NSUInteger呢?你可以试试。
在这版块待了这么久,很少见有人问OC运行时和编译时的问题
过早发现这些问题反而会影响自己的理解。
[dic objectForKey:@"size"] count]我代码中也出现这问题,这些是库方法,该怎么处理