三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
来源:互联网 发布:python sys.read 编辑:程序博客网 时间:2024/05/21 18:46
如果 你 用 id类型的变量 来存储 物件,而 id类型的变量本身 可以存储 各种类型的物件,那么 很多时候 你 可能会问 这类的问题:
1、这个物件 属于 XX类型吗?
2、XX这项措施 适用于 这个物件吗?
3、这个物件所属的类别 是 包含 在XX这个类别当中,还是 就是 XX这个类别?
根据 这些问题的答案,你 可以执行 不同的代码,避免 错误,确保 程序的完整性。
下面这个表中的措施 适用于 所有属于NSObject类型的物件,可以帮助 你 搞清楚 上述的这类问题。
这个表 并不包含 所有的措施。
如果 你 需要根据物件类型的名称 生成 一个物件,你 只需要让 这类物件 采取 class这项措施 就可以了:
这行语句的作用 就是 生成 一个Square类型的物件。
如果 mySquare 是 一个物件的话,那么 你 可以用 class这项措施 知道 mySquare这个物件 属于 哪个类型,就像 这样:
同样的道理,如果 你 要判断 objectOne 和 objectTwo这两个变量中的物件 是否属于 同一个类型,你 只需要用到 下面这行语句:
如果 你 要判断 物件myFraction 是否属于 Fraction这个类型,你 可以用 这样的语句:
在上面的表格当中,我 提到过 selector。selector 可以理解为 措施标志。措施标志 有 两个意思:1、在源代码中,措施标志 就是 措施名称本身;2、在编译 源代码时 措施标志 是 用来代替措施名称的独一无二的标志。措施标志 可以存储 在SEL类型的变量中。
要生成 措施标志,可以使用 @selector命令,并且 将 措施的名称 作为 参数。比如 这行语句
就是 为 alloc这项措施 生成 措施标志。
下面这行语句 是 为 setNumerator:andDenominator:这项措施 生成 措施标志,注意 不能忘记 冒号,因为 这项措施 是 附带参数的:
检查 一项措施 是否适用于 某一类物件,我们 需要让 这类物件 实施instancesRespondToSelector:这项措施,instancesRespondToSelector:这项措施附带的参数 是 措施的标志。比如 这行语句
的作用 就是 检查 setNumerator:andDenominator:这项措施 是否适用于 Fraction类型的物件,而 检查的依据 是 setNumerator:andDenominator:这项措施的标志,而 不是 它本身。
另外 只要知道 一项措施的标志,我们 就可以 对 某个物件 采取 这项措施。在下面这段代码当中
我 创建了 一个SEL类型的变量action,并且 将 draw这项措施的标志 存储 在变量action当中。最后 我 对 graphicObject这个物件 采取了 performSelector:这项措施,并且 将 draw这项措施的标志action 作为参数 传递 给performSelector:这项措施。上述最后一行语句的效果 相当于 这样:
利用 performSelector:这项措施 和 需要实施的措施的标志 可以用来避免 错误:
在这段代码当中,我 先检查 变量action所代表的措施 是否适用于 graphicObject这个物件,如果 适用,则 实施 这项措施;如果 不适用,则 另行 处理。
下面这段程序 及 其运行结果 可以帮助 你 更好地 理解 上面表格中的措施:
运行后,可以得到 这样的结果:
- 三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
- Obj-C的多态性、动态类型和动态绑定
- Obj-C的多态性、动态类型和动态绑定
- 二十九、多态性、动态类型 和 动态绑定(二)动态绑定 和 id类型
- 三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
- 三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
- 二十八、多态性、动态类型 和 动态绑定(一)多态性:不同的措施 共用 同一个名称
- IOS开发中的多态性、动态类型和动态绑定
- iOS多态性 动态绑定 与动态类型
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- IOS第八天——Obj-C的多态性、动态类型和动态绑定
- 三十、多态性、动态类型 和 动态绑定(三)运行时 VS 编译时
- 三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
- 动态类型和动态绑定,动态载入
- Objective-C之成魔之路【11-多态性、动态类型和动态绑定】
- 静态类型和动态类型 静态绑定和动态绑定
- 静态类型和动态类型 静态绑定和动态绑定
- 三十一、多态性、动态类型 和 动态绑定(四)id类型 和 静态类型
- Android技术讲座(3):Android应用程序的内容
- C++ 虚继承起因,语法练习
- 使用mount修改你的android中/system为只读权限
- 三十二、多态性、动态类型 和 动态绑定(五)措施所附带的参数 和 所产生的结果类型
- 三十三、多态性、动态类型 和 动态绑定(六)关于物件类型的问题
- 测试模式列表
- 三十四、多态性、动态类型 和 动态绑定(七)用 @try命令 处理 意外情况
- Android系统移植方法详解(转)
- 中国搜索引擎乱弹(1)-十年寡头养成史
- Tomcat在处理GET和POST请求时产生的乱码问题
- 考研入门(转)
- 计算机专业考研方向及院校排名(转)
- 10.27 读换行