IOS制作之iOS 系列译文:Mach-O 可实行文件仓酷云
你可能还需要学习使用Xcode这个开发环境,接著你需要掏钱向苹果注册开发者权限,基本的帐号是99美金。本视频为“斯坦福大学iPhone开发教程”,51CTO将不断关注本视频教程的更新进度,为大家提供最新的视频。当我们在Xcode中构建一个程序的时分,个中有一部分就是把源文件(.m和.h)文件变化成可实行文件。这个可实行文件包括了将会在CPU(iOS设备上的arm处置器大概你mac上的Intel处置器)运转的字节码。我们将会过一遍编译器这个历程的做了些甚么,同时也看一下可实行文件的外部究竟是如何的。实在,内里的工具比你看到的要多良多。
让我们先把Xcode放一边,踏进Commond-Lines的年夜陆。当我们在Xcode中构建一个App时,Xcode只是复杂的挪用了一系列的工具罢了。但愿这将会让你更好的分明一个可实行文件(被称之为Mach-O可实行文件),是如何组装起来的,而且是如何在iOS大概osx上实行的
XCrun
先从一些基本性的工具入手下手:我们将会利用一个叫做Xcrun的命令行工具。他看起来很奇异,可是切实其实相称杰出。这个小工具是用来挪用其他工具的。本来的时分我们实行:
1
%clang-v
如今在终端中,我们能够实行:
1
%xcrunclang-v
Xcrun定位Clang,而且利用相干的参数来实行Clang。
为何我们要做这个事变?这看起来毫无重点,胡扯八道。可是Xcrun同意我们利用多个版本的Xcode,大概利用特定Xcode版本内里的工具,大概针对特性的SDK利用分歧的工具。假如你刚好有Xcode4.5和xcode5、利用xcode-select和xcrun你能够选择选择利用来自Xcode4.5内里的SDK的工具,大概来自Xcode5内里的SDK的工具。在年夜多半其他平台上,这将是一个不成能的事变。假如你看一下匡助手册上xcode-select和xcrun的一些细节。你就可以在不安装命令行工具的情形下,利用在终端中利用开辟者工具。
一个不利用IDE的HelloWorld
回到终端,创立一个包括一个c文件的目次:
1
2
3
%mkdir~/Desktop/objcio-command-line
%cd!$
%touchhelloworld.c
如今利用你喜好的文本编纂器来编纂这个文件,比方TextEdit.app:
1
%open-ehelloworld.c
录进上面的代码:
1
2
3
4
5
6
#include<stdio.h>
intmain(intargc,char*argv[])
{
printf("HelloWorld!n");
return0;
}
保留,而且回到终端实行:
1
2
%xcrunclanghelloworld.c
%./a.out
如今你可以在终端上看到熟习的HelloWorld!。你编译了一个C程序而且实行了它。一切都是在不利用IDE的情形下做的。深呼吸一下,乐意乐意。
我们在这里做了些甚么?我们将hellowrold.c编译成了叫a.out的Mach-o二进制文件。a.out是编译器的默许名字,除非你指定一一般的。
HelloWorld和编译器
如今可选择的编译器是Clang(读作:/’kl/)。Chris写了一些更多关于Clang细节的先容,能够参考:aboutthecompiler
归纳综合一下就是,编译器将会读进处置hellowrold.c,输入可实行文件a.out。这个历程包括了十分多的步骤。我们所要做的就是准确的实行它们。
预处置:
[*]序列化
[*]宏界说睁开
[*]#include睁开(援用文件睁开)
语法和语义剖析:
[*]利用预处置后的单词构建词法树
[*]实行语义剖析天生语法树
[*]输入AST(AbstractSyntaxTree)
代码天生和优化
[*]将AST转化成更初级的两头码(LLVMIR)
[*]优化天生代码
[*]方针代码天生
[*]输入汇编代码
汇编程序
[*]将汇编代码转化成方针文件
毗连器
[*]将多个方针文件兼并成可实行文件(大概一个静态库)我们来看一个关于这些步骤的复杂的例子。
预处置
编译器将做的第一件事变是处置文件。利用Clang展现一下这个历程:
1
%xcrunclang-Ehelloworld.c
欧耶。输入了413行内容。翻开个编纂器看看究竟产生了甚么:
1
%xcrunclang-Ehelloworld.c|open-f
在文件顶部我们能看到良多以”#”开首的行。这些被称之为行标志语句的语句告知我们它前面的内容来自那里。我们必要这个。假如我再看一下hellowrold.c,第一行是:
1
#include<stdio.h>
我们都用过#include和#import。它们做的就是告知于处置器在#include语句的中央拔出stdio.h的内容。在方才的文件里就是拔出了一个以#开首的行标志。跟在#前面的数字是在源文件中的行号。每行最初的数字是在新文件中的行号。回到方才翻开的文件,接上去是体系头文件,大概一些被当作包裹着extern“C”的文件。
假如你转动到文件开端,你将会发明我们的helloworld.c的代码:
1
2
3
4
5
6
#2"helloworld.c"2
intmain(intargc,char*argv[])
{
printf("HelloWorld!n");
return0;
}
在Xcode中,你能够经由过程利用Product->PerformAction->Preprocess来检察任何一个文件的预处置输入。必定要注重这将会消费一些工夫来加载预处置输入文件(靠近100,000行)。
编译
下一个步骤:文本处置和代码天生。我们能够挪用clang输入汇编代码就像如许:
1
%xcrunclang-S-o-helloworld.c|open-f
看一看输入。我们起首注重到的是一些以点开首的行。这些是汇编指令。其他的是真实的x86_64汇编代码。最初是些标志,就像C中的那些标志一样。
我们夙昔三行入手下手:
1
2
3
.section__TEXT,__text,regular,pure_instructions
.globl_main
.align4,0x90
这三行是汇编指令,不是汇编代码。”.section”指令指出了哪个段接上去将会被实行。比用二进制暗示悦目多了。
下一个,.global指令申明_main是一个内部标记。这就是我们的main()函数。它可以从我们的二进制文件以外看到,由于体系要挪用它来运转可实行文件。
.align指令指出了上面代码的对齐体例。从我们的角度看,接上去的代码将会依照16比特对齐而且假如必要的时分用0 要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。 自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉 每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。 从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以, 其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。 以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。 iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。 其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。 好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。 以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。 down下code4app网站的每个分类的代码挨着看 iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。 其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。 最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。 在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。 众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。 好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
页:
[1]