Objective-C阿姨:C#小妹妹 你好!
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSLog(@"C#小妹妹 你好!"); return 0; }
C#妹妹:Objective-C 阿姨 早!
using System; namespace CSharpToObjectiveC { class Program { static void Main(string[] args) { Console.WriteLine("Objective-C 阿姨 早!"); } } }
C#妹妹:阿姨,你看我们的代码很像啊⋯⋯
Objective-C阿姨:是啊,我们都跟C语言是亲戚啊,包括C++和Java也都一样,都怪当初C爷爷太能干了,应用太广泛,为了方便人们学习,接下来的很多语言都在C的基础上发展。不过我跟你在血统上区别还是很大的,我是C语言的扩展,或者说是增强,爷爷的那套东西我都具备的,原始的C语言完全不用修改,我就可以编译运行,但是你就不行,你只是长得比较象而已。跟C++相比呢,我更简单易学一点。
C#妹妹:这样啊,#import <Foundation/Foundation.h> 这个语句是导入命名空间的意思么,我弟弟VB.NET好像 就是用import导入命名空间的,不过我用using语句。
Objective-C阿姨:阿姨可没有命名空间这个说法或者类似的功能的,这个语句是告诉编译器可以在那个头文件里查询定义,更有点像你添加引用的功能吧。
Objective-C阿姨:阿姨可没有命名空间这个说法或者类似的功能的,这个语句是告诉编译器可以在那个头文件里查询定义,更有点像你添加引用的功能吧。
C#妹妹:那怎么避免类名冲突啊
Objective-C阿姨:很简单啊,你看我的NSLog()这个函数,本来应该叫Log的,但是为了说明是Cocoa提供的函数,前边加了个NS。
C#妹妹:晕,这样代码看起来岂不是很乱,另外Cocoa提供的函数为啥搞了个NS的前缀?
Objective-C阿姨:这个么,你习惯就好了。NS是历史遗留问题啦,当初Cocoa叫NextStep,缩写NS,后来NextStep被苹果收购,但是编程的风格一直没有改过。其实NextStep跟苹果也很有渊源,85年乔布斯被苹果辞退后,他成立新公司用我开发了NextStep,后来苹果业绩一路下滑,发现少了乔布斯还真不行,96年又把乔布斯连公司带产品加上人一起卖了回来,你说说这事折腾的……陈年旧事了,那时你还没有出生呢...
C#妹妹:听起来好纠结...
Objective-C阿姨: 是啊,现在的小朋友多幸福啊,你看你,一出生就得到大家的宠爱,微软花巨资打造和推广,小小年纪已经发展到4.0了,可是阿姨都三十岁了,也才2.0,也没有你应用那么广泛。真是干得好不如生的好,这都是命啊....要不是Apple,估计大家只能在wiki里边看到我曾经存在过
C#妹妹:阿姨别难过了,你现在也很厉害啊,iPhone\iPad不都是用你开发的么...你看看地铁上,人手一部,牛啊。我在手机领域现在几乎是一败涂地,现在就看盖茨叔叔的Windows Phone了。对了阿姨,你连类也没有么?
Objective-C阿姨: 有啊,阿姨也是正宗的面向对象语言啊,不过跟C++一样,没有你和Java面向对象的那么彻底。我还是有全局方法的,比如你看到的main和NSLog,毕竟我骨子里边还是C语言,加上了面向对象的特征而已。你已经把不是面向对象的内容全部清除掉了。
C#妹妹:NSLog()这个语句我能猜的出来,是不是和我Console.WriteLine()是一个功能?
Objective-C阿姨:没错,不仅仅是控制台程序,只要做Mac开发,包括iPhone\iPad,NSLog()都是经常使用的,可以方便的监控程序的状态和流程。与C语言的printf()相比,NSLog()添加了时间戳和换行符,也增加了对类的支持
C#妹妹:那字符串前边的@也是表示后便的字符串强制不转义么?
Objective-C阿姨:跟那个没有关系,这里的@表示字符串是Cocoa的NSString类型。C语言有很多原始类型,比如字符数组,但是使用起来太麻烦,所以Cocoa做了扩展,扩展出了一套类似的对象,比如NSString、NSNumber、NAArray等等,功能增强了很多。在Objective-C的开发中,也要尽量用这些对象。另外@作为一个特殊的符号,只要看见代码中有@就意味着这里Objective-C做了扩展。
C#妹妹:阿姨真不容易,为了完全兼容C语言做了这么多的妥协
Objective-C阿姨:是啊,30年前C语言一统天下,面向对象编程方式又有迫切需求,所以才有了两者结合的产物,这样才能更容易被接受啊。人生需要梦想,生活需要妥协啊...
-
各位同学,本人学习Objective-C时间很短,学习Objective-C其实不是为了Mac、iPhone开发,并没有实用,
其实是一个C#用户学习Objective-C的学习笔记,学习的确切目的是帮助我理解C#,毕竟没有比较是不可能知道所谓C#的特点的
请大家批判的眼光看这个东西,如果发现和其他文章、书籍、评论、资料有冲突,请尽量以其他文章为准。并给我留言
也邀请所有高手积极拍砖,我正好用来盖房子~~~
《C#妹妹和Objective-C阿姨对话录》
(01)认识Objective-C--初次见面的问候
(02)这就是类--阿姨的狗狗
(03)NSString--再遇狗狗
(04)垃圾回收基础--拆迁队那点事
待续⋯⋯