objective-c学习笔记第六章《objective-c 多态,动态类型,动态绑定与java中的区别》

书接上文。

所谓多态,其实是oop概念里面一个比较重要的模型。多态所解决的就是在一个程序中调用不同类,这些个好多类中方法名相同的问题。比如说我在ClassA和ClassB中分别定义了两个print方法。当我在main程序中调用了[classA print]和[classB print]的时候,系统就能自动向上查询,确定使用那个print方法。基本上没有什么难理解的地方。


动态类型是一个让我觉得很纠结的问题。当有了动态类型之后,我也不知道oc到底是一个强类型语言还是一个类型弱语言了(- -),或者叫他强弱类型语言?什么是强类型语言,比如java,在定义一个变量的时候,必须强制性的添加一个关于变量类型的定义,比如整数,就必须用int或者其他数据类型。string 类型就不能存放整数。若类型语言有那些呢?最常用的要数javascript,在javascript中所有的变量都可以使用var 类型进行定义,不管你是向var n 中放字符还是整数,就这一个搞定。


oc中有一个奇妙的类型叫做,id。id可以放oc中任何合法的数据类型,比如整型,比如字符类型,比如一个类。实在是不知道这个语言在设计的时候为什么要加入一个这样让人纠结的功能。也就是说,可以笼统的认为,id类型就是所有类型的集合,假如有一个变量,你不确定到底应该定义一个类型,那么就用id没跑了。


但是,我个人还是很反感这种id类型的,因为会让程序的可读性变成0。试想一下,给你一个全部都是使用id作为数据类型的程序,阅读起来将是多么的悲剧。另外,我估计id同时也会减慢运行程序的效率。因为id不可能使用编译检查,当运行的时候发现错误才会处理。


最后介绍一下异常机制,其实在日常排错的时候最常用的不是断点,而是异常。当程序莫名其妙跳出或者崩溃的时候,假如有人告诉你问题出在那里,那么就能省下来很多时间。同时,抛出异常也增加了程序的健壮性。格式如下:

@try

{

statement;

.

.

.

}catch(NSException *exception)

{

statement;

}

简单说明一下。

try和catch中都是正常的程序体,在你觉得有可能出现问题的地方加入上面的代码,当程序运行中碰到程序解决不了的问题就会抛出异常,NSException 是一个异常类,其中包含了各种各样的异常,估计常用的都有,当使用NSException *exception之后就能捕捉到异常并将这个异常放入exception中,然后可以选择将异常打印到控制台或者显示错误页面。比如java中最容易碰到的异常就是!!!!!NullPointerException,空指针错误。万恶的指针阿!!!!!!

说道这里,其实java中的空指针错误并不是字面上理解的那样,貌似跟指针没有什么关系,基本上出现这种情况的原因百分之八十都是因为返回的是一个null值,然后又对null值进行操作了。才会抛出这个异常。另外,oc中是没有null的,oc中的nil等同于java中的null。



另外有一个问题,NSObject作为目前所有类的根类,难道他就没有一些可以作为静态能够直接使用的方法么?如果有,去哪查了?


好吧。三十秒以后就解决了这个问题,果然阿。花点钱学闭源的语言就是tmd方便。xcode中help有个documentation and api reference。里面啥都有。靠。我还满世界的去找api了。悲剧。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值