iOS id类型的方法调用

来自论坛的一个问题:[在线]一个obj-c语法的问题
直接看一个例子

@interface TestCounter : NSObject

- (TestCounter *)count;

@end

int main(int argc,char *argv[])
{
    @autoreleasepool{
        [(id)[TestCounter new] count];
    }
    return 0;
}

上面这个例子省略了@implementation部分,如果运行起来会看到multiple methods named 'count' found with mismatched result, parameter type or attributes.错误。

这是为什么呢?我取得了一个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就没事了。

时间: 2024-08-03 13:21:37

iOS id类型的方法调用的相关文章

iOS 消息(即方法调用)的两个隐藏参数 :self 和 _cmd

iOS 消息(即方法调用)的两个隐藏参数 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 以下摘自<Objective-C Runtime Programming Guide> 使用

求一个接口能使js直接调用到ios开发里面的方法

问题描述 求一个接口能使js直接调用到ios开发里面的方法 求一个接口能使js直接调用到ios开发里面的方法,就是js里面连接一个接口,能直接调用ios里面的函数,进行数据的交互 解决方案 参考iOS中JavaScript和OC交互

iOS开发之用javascript调用oc方法而非url_IOS

先来看看如何在项目中的webview上面点击一个按钮,就能达到调用oc代码 上面的这个页面是webview里面嵌套的一个项目的网页,打印订单点击之后(点击事件是一个js方法),需要调用oc里面集成好的蓝牙打印机功能,来完成打印. 所以这里只能用js代码来直接调用oc代码. 1.首先创建一个iOS类,因为这里一般都需要安卓端做一套,iOS端做一套,所以一般这样命名以示区别 .h #import <Foundation/Foundation.h> #import <JavaScriptCor

jquery.Ajax()方法调用Asp.Net后台的方法解析

 本篇文章主要是对jquery.Ajax()方法调用Asp.Net后台的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. 先来个简单的实例热热身吧.   1.无参数的方法调用 asp.net code:    代码如下: using System.Web.Script.Services;      [WebMethod]    public static string SayHello()    {   

高效的 iOS 应用版本支持方法

本文讲的是高效的 iOS 应用版本支持方法, 极少数应用程序很"奢侈"的只支持最新版本的 iOS. 设置一个较低的部署目标以及基于特定 iOS 版本的代码分支通常是很有必要的.虽然苹果公司的信息有些矛盾,还是有各种办法来完成这个.最近在这条 tweet上看到有人警告说,不要这样做: #define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7) GitHub

iOS 四种回调方法总结_IOS

最近对做IOS 项目遇到回调,抽空把相关资料整理下,以下是整理内容: 回调 回调就是将一段可执行的代码和一个特定的事件绑定起来.当特定的事件发生时,就会执行这段代码. 在Objective-C中,有四条途径可以实现回调. 目标-动作对 在程序开始定等待前,要求"当时间发生时,向指定的对象发送某个特定的信息".这里接收消息的对象是目标,消息的选择器是动作. 辅助对象 在程序开始等待之前,要求"当时间发生时,向遵守相应协议的辅助对象发送消息".委托对象和数据源是常见的辅

iOS UIView常见属性方法小结_IOS

下面通过实例代码给大家详细介绍了iOS UIView常见属性方法,具体代码如下所示: UIView : UIResponder /** 通过一个frame来初始化一个UI控件 */ - (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互 @property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; // default is YES // 控件的一

jquery.Ajax()方法调用Asp.Net后台的方法解析_jquery

利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法.先来个简单的实例热热身吧. 1.无参数的方法调用asp.net code: 复制代码 代码如下: using System.Web.Script.Services;   [WebMethod]   public static string SayHello()   {        return "Hello Ajax!";   }  using System.Web.Script.Services; [Web

C# 线程之间的方法调用问题

问题描述 项目中有两A(),B()两个方法,当线程执行A方法时,在A中调用了BprivatevoidA(){doublex,y,z;//接收来自单片机的数据//执行速度非常快...........line.add(x,y);B(x,y,z);}privatevoidB(doublenx,doubleny,double,nz){//处理大量计算数据,延迟较大delay(100000)...........}上述两方法,首先执行A,代码很少,其中主要向tchart中画线,但B中有大量数据处理,比较耗