我比较擅长的语言应该是Java/Python/C++,第一眼看到Objective-C的时候,我在想这是什么反人类语言啊
但是在百度百科上看到对Objective-C的介绍是:它是C语言的超集,当时我人就傻了,这跟C语言能扯上一点关系吗?
好吧,是我太肤浅了,我去了解了一下,发现它虽然是一门面向对象的语言,但是与通常的面向对象语言不一样
比如它的方法调用,通常不叫调用,而是称为发出信息,在它编译的时候,会将对象函数转换为类似C语言的普通函数,只不过加了个首参数为当前对象而已
举例:
在Java中调用对象方法:
1 | obj.method(arg) |
在OC中调用对象方法:
1 | [obj method:arg] |
但是OC编译后就是:
1 | method(obj, arg) |
在结绳4.0的设计过程中,关于结绳中文系列项目类库封装不便的问题一直在困扰着我
主要问题是什么呢,在3.0封装类库,假设需要用到Java的java.io.File类,需要用一个类将File包装起来,进行访问,对类库封装者十分不友好,
而在看到了OC面向对象的原理之后,瞬间灵感就来了,想到了一种方式去指代目标平台相应的类,比如:
1 | @指代类("java.io.File") |
在编译时生成静态方法(伪代码):
1 | class File_ReferenceClass |
如果是针对C++平台,也是同样的原理:
1 | @指代类("std::list") |
在编译时生成静态方法(伪代码):
1 | class STD_LIST_REF |