iOS_book 01- Xcode基本用法和Hello world

(基于精通iOS开发 第七版)

iOS程序的特点
1:在iOS中,一次只能有一个应用处于活动状态并显示在屏幕上。从iOS 4开始, 可以专门编写代码使用户按下home键后,app可以在后台继续运行。
不处于活动状态或者在后台运行时,应用程序不会占用任何CPU资源,这会严重干扰其与开放式网络的链接。iOS允许后台处理,不过要使应用程序在此状况下良好运行则需要开发者自己努力。
 
2:只能使用一个窗口:除非app经过特别编码,并且链接另一个屏幕或者使用Airplay镜像,否则iOS只允许app操作一个窗口。
app与用户的所有交互都在这个窗口中完成,而这个窗口大小就是iOS设备屏幕的固定大小。
 
3:有限的访问权限:iOS的文件系统会为每个应用程序分配一块独立的区域,称为沙盒。每个app只能读写自己沙盒内的文件。沙盒就是app用于存储文档/偏好设置等任何有效数据的地方。
app还会受到其他方面的限制,比如不能通过iOS访问端口号较小的网络,也不能进行在台式机中需要根用户或者管理员权限的操作。
 
4: 有限的响应时间:由于使用方式特殊,iOS需要快速响应各种事件,你的应用程序也应如此。启动app时,要立即打开它,载入偏好设置和数据,并把主视图显示到屏幕上,这些过程要在几秒钟内全部完成。
app在运行的时候,随时都有可能面对突然退入后台的情况。app必须尽快保存一切内容并退出。如果没有在5秒之内保存必要的数据并且放弃对系统资源的控制,无论是否已经完全保存,app进程都会被终止。有一个API可以在应用程序终止前请求多一些时间来完成必要的工作,之后用到会介绍。
 
5:有限的屏幕尺寸
硬件尺寸指的是屏幕的实际物理尺寸,以像素为单位。不过在编写软件只需要注意软件尺寸一栏的数字。
软件尺寸都是实际硬件尺寸的一半。苹果公司选择将应用程序绘制的所有内容都在内部乘以2,这样不需要做任何代码改动就可以将其铺满新屏幕。
所有使用Retina屏幕的设备都采用了内部乘以2的机制,iPhone 6 Plus例外,需要乘以三。
通常来说无需担心应用程序实际放大的倍数,只需要根据软件屏幕尺寸进行开发,剩下的交给iOS来做就行。
唯一不适用于这个规则的是位图。由于位图自身的尺寸是固定的,无法让同一张图片在Retina屏幕和非Retina屏幕上拥有一样好的效果。如果这样做,iOS会为Retina屏幕设备将图片放大,从而产生模糊的感觉。可以通过为每张图片补充2倍和3倍的副本来解决这个问题,iOS会根据应用程序运行的设备屏幕来选取合适的那张。
 
 
6:有限的系统资源:Cocoa Touch提供一种内置机制,可以在内存不足时通知应用程序,出现这种情况时,app必须释放不必要的内存空间,否则就可能被强制退出。
 
7: 不支持垃圾回收:Cocoa Touch使用的是Objective-C,但是iOS并不支持Objective-C早在本世纪初就已经具有的一个关键特性:垃圾回收。iOS使用的是ARC来解决手动管理Objective-C对象占用内存的问题。ARC也是iOS应用程序的默认内存管理机制。
 
创建iOS项目
 
 
 
 
 
 
 
 
Xcode项目窗口
 
 
工具栏:
 
工具栏左侧依次是用于启动和停止项目运行的控制按钮
用于选择运行方案的下拉菜单,以及用于启动和禁用断点的按钮
方案(scheme)将目标和构建设置结合在一起。
 
工具栏中间的大方框是活动视图(Activity View).活动视图显示着当前正在进行的操作和处理。
 
 
导航视图,在工具栏下方,项目窗口左侧就是导航视图(Navigator).导航视图共提供8个面板。供开发者通过不同的方式查看项目。下面从左至右依次介绍。
 
 
 
 
 
跳转栏
 
新的编译器和调试器
苹果公司一直使用GCC(GNU Compiler Collection)作为底层编译器。但是最近已经全面转换到新的LLVM(Low Level Virtual Machine, 底层虚拟机)编译器。
LLVM 还提供了一个精准的静态分析其(static analyzer), 可以扫描代码以查找到各种潜在问题,包括内存管理问题。
 
 
 
 
 
main.m:Objective-c 项目还包含了一个main.m文件,里面是应用程序的main()方法,通常不需要编辑或修改这个文件,事实上最好不要碰这个文件,除非你知道自己在做什么。
 
 
Interface Builder 简介
选择Main.storyboard文件,这个文件就会在编辑器面板中打开,可以看到一个完全空白的iOS设备屏幕,可以在这个背景上编辑界面。这就是Xcode的Interface Builder有时候称为IB,用来设计应用的用户界面。
 
文件格式:
Interface Builder支持不同的文件类型:最初版本使用扩展名为.nib的二进制格式,后来有了扩展名.xib的版本(一种基于Xml的衍生格式)。两者的文档类型完全一样,但xib格式的版却是基于文本格式的,这样做有很多优势,尤其是使用源代码控制管理的时候。大部分开发者都把Interface Builder文件成为nib文件。不管文件实际使用的是.xib还是.nib扩展名,都被称为nib文件。
一个nib文件可以包含任意数量的对象,但在iOS项目中,每个nib文件通常只包含一个视图(一般都是全屏视图)以及相关联的控制器或对象。这可以对应用进行划分,只在某个视图需要显示的时候加载它的nib文件。这样能为内存受限制的iOS设备节约应用运行时的内存。
storyboard文件类型,可以将storyboard想象成一个“元nib文件(meta-nib file)”,因为它可以包含多个视图和控制器,以及如何在应用运行时进行相互连接的配置信息。与一次就加载完成所有内容的nib文件不同,storyboard不会一次加载所有的内容,你需要在加载某视图和控制器时向它请求特定的内容。
 
Main.storyboard文件会在应用启动时自动加载, 往这里添加对象就可以组成应用的用户界面。在Interface Buidler中创建的对象会在程序加载storyboard或nib文件时被实例化。
每个storyboard都是由一组或多组相对应的视图和控制器构成的。视图就是眼睛能看到并可以在Interface Builder中进行编辑的部分,而控制器则是你编写的应用代码,用来处理用户的交互事件。应用的实际操作都是在控制器内执行的。
通过使用一个storyboard来构建能在任何尺寸的设备上运行的应用程序,不需要两个storyboard,当程序在设备上启动时,它会改变自身以匹配当前屏幕的形状,事实上,苹果公司将通过这种方式设计出的应用程序成为自适应的应用程序。
在storyboard里的正方形内的顶端一行可以看到三个图标:View Controller(视图控制器)、First Responder(第一响应者)和Exit(离开)。
视图控制器:代表了一个控制器对象,会从文件中加载控制器以及相关的视图。它的任务是管理用户在屏幕上看到的内容。一个应用程序通常有多个视图控制器,每个界面各一个。
第一响应者:简单来说就是用户当前正在进行交互的对象。如果用户正在向一个文本框中输入数据,那么这个文本框就是当前的第一响应者。第一响应者会随着用户与用户界面的交互而变化,通过First Responder图标可以方便的与当前作为第一响应者的空间或者对象通信,不需要编写代码来判断到底哪个控件(或视图)是当前的第一响应者。
 
Interface Builder的编辑器中还有一个层级视图区域,目前称之为文档略图(Document Outline)。如下
这里显示storyboard的所有内容,并有场景作为相关内容的容器来进行划分。本示例中只有一个场景,它的名称是View Controller Scene。 可以看到它包含了一个名称为View Controller的子项,往下又包含了一个名称为View的子项和其他一些内容。通过这种方式可以方便地浏览全部的内容。在主编辑区域看到的所有内容都能在这里找到。
 
View 图标代表UIView类的一个实例。UIView对象是用户能够看到并与之交互的一块区域。本例只有一个视图,所以这个图标代表该应用中用户能够看到的全部内容。
 
实用工具视图被分为两部分(如果当前没有看到这个实用工具视图,可以单击工具栏最右侧的View按钮(共三个),或者选择View>Utilities>Show Utilities,也可以按下Option+Command+0快捷键)。
实用工具视图下半部分成为库面版(Library Pane),或者简称为库。库是在程序中可以重复使用对象的集合。库与工具栏之间的部分统称为检查器。
库面板顶部工具栏中的4个图标将它分成了4个部分。
文件模板库(File Template Library):这部分包含一些文件模板,可以通过他们像项目中添加新文件。
代码片段库(Code Snippet Library):这部分包含一些代码片段,可以直接把它们拖到源代码中使用。写了一些希望以后能够再次使用的代码,那么在文本编辑器中选中想要的代码,然后将其拖到代码片段库中就行了。
对象库(Object Library):这部分包含各种可重用的对象,比如文本框、标签、滑块、按钮等可以用来设计iOS界面的任何对象。
媒体库(Media Library):这个库包括用户的所有媒体文件,有图片、声音以及影片文件等。
 
当你放置视图时,Interface Builder默认以为你放置的是相对于父视图左上角的位置。问题在于,我们放置标签的视图比运行应用程序的iPhone模拟器屏幕要宽。我们将标签在Interface Builder里居中放置,并不意味着在接下来要测试应用程序上居中放置。这是一个始终要面对的问题:应用程序最终运行的设备屏幕也许与Interface Buidler设计界面上所见的尺寸不一样。之前说过,这样做是有目的的,苹果公司让程序员尽可能在抽象的正方形上设计,并使你的屏幕布局根据运行时的屏幕尺寸进行自适应。
修复这个问题:在iOS 6中,苹果公司添加了一种名为自动布局(Auto Layout)的技术,可以让你为视图添加约束(constraint),这样就能让其根据实际的屏幕空间自适应调整位置和尺寸。
一个简单的解决方法:将作为设计基础的正方形视图进行改变,使其看起来更像实际运动应用程序的iPhone模拟器的形状。
在项目导航面板中选中Main.storyboard图标,然后在使用工具面板顶端的检查器分页面板中点击File Inspector(文件检查器)图标,
在检查器面板底部,可以看到两个标记为Use Auto Layout(使用自动布局)和Use Size Classes(使用尺寸分类)的复选框,都处于选中状态。点击Use Size Classes复选框取消勾选,完成后Xcode会询问你是否想要保持iPhone或iPad尺寸分类的数据。选则保存iPhone尺寸分类的数据并点击Disable Size Classes,编辑区域中的屏幕轮廓会重新调整为类似iPhone的形状。
 
 
属性修改
库面板上方的区域,这一部分称为检查器。
 
打开项目导航面板,查看Hello World文件夹里名字为Images.xcassets的文件,它被称为资源目录(asset catalog).每个Xcode项目创建时都会默认生成一个资源目录,用来管理你的应用图标和其他图片。
这里有个误区:Xcode显示的是点数(point)尺寸,而不是像素尺寸。这里的点数指的是屏幕上的特殊尺寸。在旧的iPhone设备(iPhone4之前的所有手机)以及iPad1、 iPad 2 和iPad mini上,一点代表单个像素;而在其他Retina屏幕的设备上,一点表示实际上是一个2像素*2像素的正方形。不过iPhone 6有些特殊,它的一点是3像素*3像素的正方形。
iOS程序都会有一个启动界面,这是因为将应用加载到内存中需要时间,而这个界面能让用户立刻看到程序正在执行中。在iOS8之前的版本中,可以提供一张图片(事实上,针对不同的分辨率需要多张图片)以表示应用程序的启动界面。iOS8保留了这种方式,不过苹果公司推荐使用一个启动文件来代替启动图片的作用。当然,如果应用程序需要支持旧的系统,同样也应该提供启动图片。
启动文件:是一个包含启动界面UI的nib文件或者storyboard。在iOS8的设备上,如果存在启动文件,他将优先被视作启动图片的文件。
LaunchScreen.xib是项目中的一个启动文件。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

posted @ 2016-02-22 23:40  三恒一书  阅读(437)  评论(0编辑  收藏  举报