10个迷惑新手的Cocoa,Objective-c开发难点和问题 39-M-X21k

10个迷惑新手的Cocoa,Objective-c开发难点和问题 39-M-X21k1 language background S T8T xp9pl l 首先 c c 语言背景 必须 ZG p TCA 很多人问 没有任何语言基础 我不想学 c 直接学 objective c 2T TdH 这里简单几句 objc 90 代码是 c 众多开源 代码

大家好,我是讯享网,很高兴认识大家。 1. language background S[T8T|_
xp9pl[l
首先c, c++语言背景,必须。 ;ZG\p TCA
很多人问 “没有任何语言基础,我不想学c直接学objective-c” 2T TdH)
这里简单几句,objc 90%代码是c、众多开源 代码是c,c++。你不学好c在unix世界里只能是个二流开发者!也许说得过于严厉,不过自己斟酌把。 _{Hj^}+$
)];K .zP
接着English必须。 {91nL'-'
需要英语!需要英语!需要英语!苹果不会把它们文档都写成中文的。“什么,有人翻译?” 等有人闲着翻译出来了的时候,大家都已经卖了很多软件了。你也是跟着人家屁股后面做开发。 Yir [!{
^Va1f'g
2. Runtime(运行时) /^|Dbx!u
8'r[te4,
Objective-c是动态语言,  很多新手或者开发人员常常被Runtime这个东西所迷惑。而恰恰这是一个非常重要的概念。 为什么重要呢!?我可以这么问:“如果让你(设计、)实现一个计算机语言,你要如何下手?” 很少程序员这么思考过。但是这么一问,就会强迫你从更高层次思考 (1)以前的问题了。 注意我这句话‘设计’括起来了,稍微次要点,关键是实现。 3<zp
XF_ pN[}
我把实现分成3钟不同的层次: WSY}d Vr
    1. 传统的面向过程的语言开发,例如c语言。实现c语言编译器很简单,只要按照语法规则实现一个LALR语法分析器就可以了,编译器优化是非常难的topic,不在这里讨论范围内,忽略。 这里我们实现了编译器其中最最基础和原始的目标之一就是把一份代码里的函数名称,转化成一个相对内存地址,把调用这个函数的语句转换成一个jmp跳转指令。在程序开始运行时候,调用语句可以正确跳转到对应的函数地址。 这样很好,也很直白,但是。。。太死板了。everything is pre-determined UOmY-\ &c
6B ?twh)
    2. 我们希望灵活,于是需要开发面向对象的语言,例如c++。 c++在c的基础上增加了类的部分。但这到底意味着什么呢?我们再写它的编译器要如何考虑呢?其实,就是让编译器多绕个弯,在严格的c编译器上增加一层类处理的机制,把一个函数限制在它处在的class环境里,每次请求一个函数调用,先找到它的对象, 其类型,返回值,参数等等,确定了这些后再jmp跳转到需要的函数。这样很多程序增加了灵活性同样一个函数调用会根据请求参数和类的环境返回完全不同的结果。增加类机制后,就模拟了现实世界的抽象模式,不同的对象有不同的属性和方法。同样的方法,不同的类有不同的行为! 这里大家就可以看到作为一个编译器开发者都做了哪些进一步的思考。但是。。。还是死板, 我们仍然叫c++是static language。 .K<Q&
{$Gd2g O
    3. 希望更加灵活! 于是我们完全把上面哪个类的实现部分抽象出来,做成一套完整运行阶段的检测环境。这次再写编译器甚至保留部分代码里的sytax名称,名称错误检测,runtime环境注册所以全局的类,函数,变量等等信息等等,我们可以无限的为这个层增加必要的功能。调用函数时候,会先从这个运行时环境里检测所以可能的参数再做jmp跳转。这,就是runtime。编译器开发起来比上面更加弯弯绕。但是这个层极大增加了程序的灵活性。  例如当调用一个函数时候,前2种语言,很有可能一个jmp到了一个非法地址导致程序crash, 但是在这个层次里面,runtime就过滤掉了这些可能性。 这就是为什么dynamic langauge更加强壮。 因为编译器和runtime环境开发人员已经帮你处理了这些问题。
.eP.&
bD8Gwi=iiu
1~QPG\cdIX
好了上面说着这么多,我们再返回来看objective-c.  现在你是不是能理解这样的语句了呢? ]P2"[y
SG4%}wn%
小讯
上一篇 2025-02-21 23:53
下一篇 2025-02-25 18:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/36852.html