ObjC学习4-多态、动态类型、动态绑定及异常处理
1.动态绑定和ID类型
这里建了两个灰常简单的类等会用ID类型去实现它
@interface ClassA:NSObject
{
}
-(void) print;
@end
@implementation ClassA
-(void) print
{
NSLog(@"i am a!");
}
@end
@interface ClassB:NSObject
{
}
-(void) print;
@end
@implementation ClassB
-(void) print
{
NSLog(@"i am b!");
}
@end
主程序代码:
ClassA * a = [[ClassA alloc]init];
ClassB *b = [[ClassB alloc]init];
id * i ;//定义一个ID类型
i=a;
[i print];
i=b;
[i print];
[a release];
[b release];
结果:
这里可看出ID 类型是一个灰常灵活的类型,结合多台,动态绑定和动态类型就可以轻易编写出来自不同类型的对象发送的相同消息的代码。
类似C#里面的Object类型~
*使用ID有一点需要注意:由于ID类型是动态的所以编译器只需要知道方法名及参数就好类型什么的好像是忽略了,所以有时代码编译时不会出错,但运行时就出错。所以在原则上可以尽量少使用ID类型。
2.使用不同类型的变量时,要是想知道这个变量的类型是否是某个类型子类?或是是否有某个方法?
在原代码基础上添加
if([a class]==[b class])//是否是相同类型
{
NSLog(@"yes");
}else{
NSLog(@"no");
}
if([i class]==[b class])
{
NSLog(@"yes");
}else{
NSLog(@"no");
}
if([a isMemberOf:[NSObject class]])//是否是NSO成员
{
NSLog(@"is member of nso");
}else{
NSLog(@"not memeber of nso");
}
if([a isMemberOf:[ClassA class]])
{
NSLog(@"is member of nso");
}else{
NSLog(@"not memeber of nso");
}
if([a isKindOf:[NSObject class]])//是否是子类或其子类成员
{
NSLog(@"is kind of nso");
}else{
NSLog(@"not kind of nso");
}
if([a isKindOf:[ClassA class]])
{
NSLog(@"is kind of A");
}else{
NSLog(@"not kind of A");
}
//@selector方法可以用SEL类型去接收
if([i respondsToSelector:@selector(print)] ==YES) //判断是否有print方法,再执行
{
[i print];
}else{
NSLog(@"not fun print");
}
if([i respondsToSelector:@selector(ok)] ==YES)
{
[i ok];
}else{
NSLog(@"not fun ok");
}
NSLog(@"%@",[i respondsToSelector:@selector(haha)] ?@"YES":@"NO");
结果为 :
i am b !
not fun ok
NO
由此可以让ID类型更灵活 减少运行时错误.
3.异常处理
@try
{
[i ok];
}
@catch(NSException *e)
{
NSLog(@"Caught %@%@",[e name],[e reason]);//输出异常名称,异常内容
//@throw;抛出异常
}
和别的语言一样 有try 有catch 有 throw ,
只不过是以一种指令的形式表现出来@~~~
-------------------------------------------------------------------------
今天是520,是你在try,我在默默地catch,throw1326,爱乐老婆宝宝~
ObjC学习4-多态、动态类型、动态绑定及异常处理相关推荐
- 解析Objective-C中多态、动态类型和动态绑定
解析Objective-C中多态.动态类型和动态绑定 转自http://mobile.51cto.com/iphone-285157.htm Objective-C中多态.动态类型和动态绑定是本文要介 ...
- C++工作笔记- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...
- iOS开发笔记系列-基础3(多态、动态类型和动态绑定)
多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方 法所需要的代码,这使得它独立于其他的 ...
- Objective-C路成魔【11-多态性、动态类型和动态绑定】
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 多态这个其 ...
- Python|装饰器|执行时间|递归|动态属性|静态方法和类|继承和多态|isinstance类型判断|溢出|“魔法”方法|语言基础50课:学习记录(6)-函数的高级应用、面向对象编程、进阶及应用
文章目录 系列目录 原项目地址: 第16课:函数的高级应用 装饰器(记录执行时间的例子) 递归调用 简单的总结 第17课:面向对象编程入门 类和对象 定义类 创建和使用对象 初始化方法 打印对象 面向 ...
- python变量类型是动态的_Python 学习 第四篇:动态类型模型
Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型.该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变 ...
- C#学习笔记(十一):动态类型
C#是一门静态类型的语言,但是在C#4.0时微软引入了动态类型的概念. dynamic 关键字dynamic用来定义动态对象,我们来看一下动态类型的一些特性. 调用不同类的相同方法 我们有两个或多个不 ...
- java多态怎么学_Java学习笔记---多态
在面向对象的程序设计中,多态是继数据抽象和继承之后的第三种基本特性: 多态通过分离做什么(基类对象)和怎么做(导出类对象),从另一角度将接口和实现分离开来.多态不但能够改善代码的组织结构和可读性,还能 ...
- [C#基础知识系列]专题十七:深入理解动态类型
本专题概要: 动态类型介绍 为什么需要动态类型 动态类型的使用 动态类型背后的故事 动态类型的约束 实现动态行为 总结 引言: 终于迎来了我们C# 4中特性了,C# 4主要有两方面的改善--Com 互 ...
最新文章
- fpga经典设计100例_图解运放电路/OP放大电路设计/OP放大器应用技巧100例
- 【iOS7开发笔记】tableview之通过代码自定义cell(cell的高度不一致)
- LinearPolar函数
- python基础笔记_python基础学习笔记(九)
- Silverlight 2 Customized Control 开发
- [Classic] 日文版《出师表》
- SQL Server 中的case when then else 中的结果类型
- FJUT Home_W的gcd(乱搞)题解
- 算法:eight Queens 8皇后问题
- 基于专利多属性融合的技术主题划分方法研究
- 从NC程序中提取路径点的XYZ
- [libtorrent] windows搭建 libtorrent 开发环境
- 硬件系列(一)----------WIFI打印机之使用socket进行打印机搜索
- PIC单片机-Mplab的使用与实践
- css 子元素选择器
- 水平仪算公式计算机,水准仪的使用及计算方法
- NLP-准确率、精确率、召回率和F1值
- 茶馆预定APP开发功能需求
- 求1!+2!+...+10!的值
- 大姨妈的由来【摘字古书】
热门文章
- android定义 task,Android Gradle 自定义Task 详解
- java中div的用法,Java Math floorDiv()用法及代码示例
- 华为nova5pro怎样把计算机放到快捷,华为nova5pro快捷键怎么设置
- 2019电子科大计算机基础知识,电子科技大学820真题1999-2019终极版.pdf
- mysql批量删除数据库_数据库实现批量删除数据的操作方法(代码实例)
- java class教程_深入理解Java Class文件格式(七)
- html5对属性布尔的值设定,如何在Javascript中设置HTML5必需属性?
- 我❤️—Python自动化测试,30岁熬到月薪20K+,分享我的多年面试经…
- java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...
- java中选择结构有哪些_Java中的选择结构