游泳健身了解一下,object-c也了解一下

       本文谈不上技术文章,只是前几天看了object-c语法,其实oc语法此前看过一次,不过纸上得来终觉浅,看过后没怎么实践,后来也就忘得差不多了。这次又看了一下,然后随便写几句吧。如果单纯有java基础,看oc会觉得有好多弯要转。如果有c/c++基础,看oc会稍微好一些,毕竟oc是c的超集,属于c大本营内一员,当然,在这个大本营,oc是自成一派的。我想因为是c大本营的语言,所以ios系统可以做到不用安装内存整理工具,就可以长时间不重启手机,系统用起来还是很流畅,而java阵营的android就不行,手机用时间久了就会觉得卡。所谓自成一派,其实感觉oc很多设计是为了不同而不同,比如类的定义oc放着class不用,非得用interface,然后接口定义是protocol了。如果习惯了点运算符,比如obj.print(),在oc中着实需要转换一下思路,oc中点运算相当于调用属性的get/set方法,并且仅限于调用set/get方法,感觉好浪费,如果调用实例方法,需要[obj print]才行,因此oc程序中,包含大量的中括号。当然也包含很多加/减号,这里加减号除了作为算数运算符,还有了新的用途,那就是标识类方法和实例方法。使用加号修饰,表示该方法为类方法,使用减号修饰,表示该方法为实例方法。另外,前面说方法调用,其实是不准确的,oc中没有方法调用一说,叫给对象发送一个消息。像c++,运行时所执行的代码由编译器决定,如果代码中调用的函数是多态的,那么运行时就要按照编译器生成的虚函数表进行查询到底该执行哪个函数的实现;而oc,其运行时所执行的代码由运行环境决定,不论是否多态,总是在运行时才去查找所要执行的方法,实际上编译器甚至不关心接收消息的对象是何种类型。但一说到发消息、收消息,脑子里面总会想到mfc的消息映射机制,经典的sendMessage()和postMessage(),或者android里的handler发消息,脑子里面想的这才是发消息--响应消息。而oc中貌似你不知道消息发送者和接受者是谁,有点傻傻分不清,这一点刚开始学时还是有点绕的。我想这样的设计主要是为了语言的多态,或者说动态特性。但实际应用中很多时候并不是那么动态的,比如一个ui控件,调整下背景颜色、字体大小什么的,都是一对一的调用。而动态的地方都是少数的,偏底层的,否则编程的地方处处都是动态,那编程这活就太难干了。 oc中的category特性挺有意思,不过还是有点像c++中一个头文件加多个实现文件,大家只要共同包含一个头文件就行了,但是要比这个强大。category主要是方便类的扩充,甚至可以扩充系统的类库。但是要注意命名,否则一不小心重写了系统类的方法,那就坑大了。另外,oc中block感觉就是c++中的函数指针,或者是java中的匿名内部类,当然不同点肯定有很多,主要是这么一想,就觉得没什么神秘的了。

       由于oc代码写的不多,理解比较浅显,所以上面说的有些可能是片面的和错误的。欢迎大家指正。

猜你喜欢

转载自blog.csdn.net/u013085897/article/details/80344195