编写iOS应用程序有何不同
- 1.只能同时运行一个应用程序:当程序不处于活动状态也不是在后台运行时,它不会占用任何cpu资源,因此也会断开网络连接。iOS允许程序在后台进行处理,但要做到这点,开发者需要多做些努力
- 2.只有一个窗口:iOS只允许应用程序操作一个窗口,应用程序与用户的所有交换都在这个窗口中完成,而且这个窗口的大小就是iOS设备屏幕的大小,是固定的。
- 3.有限的访问权限:iOS严格限制了应用程序的访问权限,ios的文件系统会为每个应用程序分配一块独立的区域,这块区域称为沙盒,每个应用都只能对自己沙盒内的文件进行读写。应用程序还会受到其他方面的限制,比如,不能访问iOS中端口号较小的网络端口。
- 4.有限的响应时间:由于使用方式特殊,iOS需要能够快速响应各种时间,应用程序也应该如此,在应用程序运行的任何时刻,都可以通过单击home键回到主界面,这时候,应用程序必须快速保存一切内容并退出,如果没有在5秒内保存必要的数据并放弃对系统资源的控制,则无论是否已经保存完成,应用程序都会被终止。有一个api可以在应用程序终止前申请多一些的时间来完成必要的工作,你必须知道如何使用它才行。
- 5.有限的屏幕大小:因为屏幕尺寸的问题,无法摆放更多的控件,极大的影响了所能提供的应用种类和交互性。
- 6.有限的系统资源:由于iOS具备的图形特性和多种功能,内存很容易被消耗光,所以Cocoa Touch提供了一种内置机制,可以在内存不足时通知应用程序,出现这种情况时,应用程序必须释放不必要的内存空间,否则就可能被强制退出。
- 7.不支持垃圾回收机制:Cocoa Touch使用的时Objective-C,但是iOS却并不支持一个Objective-C早就存在的关键特性:垃圾回收。这需要开发者自己去手动管理内存。但是,在最新版本iOS基本解决了这个问题,这要归功于ARC(Automatic Reference Counting,自动引用计数)功能,ARC并不是垃圾回收的代替品,事实上,很多方面,它比垃圾回收更优秀。
- 8.与众不同的交换方式:iOS设备没有键盘和鼠标,大部分的交换都会由iOS系统完成。例如,如果应用到了文本框,iOS系统就会在用户单击文本框时调出软键盘,不需要开发者为此额外编写代码。
分镜(storyboard):每个分镜都是由一组或多组相对应的视图和控制器构成的,视图就是你眼睛能看到并可以在界面构建器中进行编辑的部分,而控制器则是你编写的应用代码,用来处理用户的交互事件,应用的实际操作都是在控制器中进行。
界面构建器包含三个项目:
- 视图控制器(view controller):视图控制器代表会从某存储文件中加载控制器以及相关联的视图。
- 第一响应者(First Responder):简单的说就是用户当前正在进行交互的对象,如果用户正在向一个文本框输入数据,那么这个文本框就是第一响应者。第一响应者会随着用户与用户界面的交互而变化,而通过First Responder图标则可以方便与当前作为第一响应者的控件等对象进行通信,不需要编写代码来判断当前到底哪个控件是第一响应者。
- 离开(exit)
MVC模式(Model-View-Controller):
- 模型:保存应用程序数据的类。
- 视图:包括窗口、控件以及其他一些用户可以看到并能与之交互的元素。
- 控制器:把模型和视图绑在一起的代码,包括处理用户输入的应用程序逻辑。
MVC的目标是最大限度地分离这3类代码。创建的任何对象都应该非常清晰明确,让人一看便知这个对象所属的分类(模型、视图、或控制器),尽量不要包含哪些可能被认为属于多个分类的功能。例如:实现按钮的对象不应该包含按钮点击时处理数据的代码,实现银行账户的对象不应该包含绘制表格以显示交易数据的代码。
用户界面控件有三种基本模式:活跃、静态(又叫非活跃)、和被动。
- 活跃控件:点击它们时会发生一些事情,通常是触发一段自己编写的事件代码。
- 静态控件:类似于图像视图等的控件,尽管能对UIImageView控件进行一些配置使其能够触发操作方法,但用户不能执行任何操作,标签和图像一般都采用这种方式。
- 被动控件:仅用于存储用户输入的值,以备后续使用。这些控件不会触发任何操作方法,但是用户可以与之交互,并修改它们的值。被动控件一个典型的例子就是文本框。