Mac与ios开发的差别(个人整合)

原创
2013/03/05 14:26
阅读数 486

iOS是从MacOS衍生出来的专门未为移动设备(iphone)推出的操作系统。
iOS和Mac OS的UI观念有很大差别,iOS主要支持手势操作,包括多触点技术等等。
从开发人员观点看,iOS和macos相比,对普通开发人员多加了不少限制。

两者的框架有一定的差异:
框架差异
虽然iOS的大多数框架同样存在于 Mac OS X系统,但不同平台框架具有不同的实现方式和使用方式。下面收集了一些Mac OS X 开发者开发iOS应用程序需要注意的重要差别:
UIKit 与 AppKit 的对比
在 iOS系统中,创建图形应用程序、管理事件循环以及执行其他界面相关的任务都离不开UIKit提供的基础结构。UIKit和AppKit具有非常显著的区 别,在设计iOS应用程序的时候,应该特别注意这一点。也正是因为这个原因,在将Cocoa应用程序迁移到iOS系统的时候,您必须提供和界面相关的类和 逻辑。表6-1列出了框架之间的特定的差异,它可帮助您理解iOS中的应用程序应该具有什么特征:

表 6-1  界面技术的差异
差异
讨论
文档支持
在iOS系统中,文档角色的重要性有所降低,简单内容模型则变的越来越重要。因为iOS系统的应用程序通常只拥有一个窗口(在不连接外部显示的情况下), 主窗口是创建及编辑所有应用程序内容的唯一环境。更重要的是,所有和文档相关的操作,包括文件的创建和管理,现在都由应用程序在幕后完成,不再需要用户干 预。
视图类
UIKit为您提供一组非常有针对性的视图和控件。AppKit框架有许多视图和控件无法在iOS设备上工作,其他一些视图则被更具iOS特色的视图替 代。例如,在显示分层信息的时候,iOS不使用 NSBrowser类,而是使用完全不同的样式(导航控制器)。如需了解iOS中的视图和控件及其使用方式,请查看iPhone人机接口准则。
视图座标系统
iOS系统Quartz和UIKit内容的绘画模型和Mac OS X的基本相同,只有一处例外。在 Mac OS X绘画模型坐标系统中,窗口和视图的原点默认位于左下角,坐标轴向上向右延伸。但在iOS系统中,默认的原点位置是左上角,坐标轴向下向右延伸。Mac OS X的座标系统称为“被翻转”的座标系统,iOS则是缺省座标系统。如需进一步了解图形和座标系统,请查看iOS视图编程指南。
窗口即视图
从概念上来看,iOS系统的窗口和视图Mac OS X的具有相同含义。但从实现的角度来看,区别很大。在Mac OS X系统中,NSWindow类是NSResponder类的子类,但在iOS系统中,UIWindow实际是UIView的子类。继承关系上的改变表明窗 口将会使用Core Animation层来绘制外表。之所以有这样的改变,主要是为了在操作系统级别支持窗口分层。举个例子,系统可以在一个独立的窗口中显示状态栏,并让该 窗口浮动于应用程序窗口之上。
iOS系统和Mac OS X系统另外一个差异和窗口的使用方式相关。Mac OS X应用程序可以用于任意数量的窗口,但大多数iOS应用程序只能有一个窗口。在iOS应用程序中显示不同屏幕的数据不是通过改变窗口实现,而是通过在应用程序窗口中切换定制视图来完成。
事件处理
UIKit的事件处理模型和Mac OS X的事件处理模型区别很大。UIKit框架不向视图发送鼠标和键盘事件,而是发送触摸和移动事件。这些事件不但要求您实现一组不同的方法,同时也要求您修 改整个事件处理代码。举个例子,本地跟踪循环的排队事件不能包含触摸事件,您的代码也据此做相应调整。如需进一步了解iOS应用程序的事件处理,请参考 iOS事件处理指南。
目标-动作模型
UIKit支持三种形式的动作,AppKit仅支持一种。UIKit的控件可以在不同的交互阶段调用唤醒不同动作,而且一个交互过程可以指定多个目标。因 此,在UIKit中,一个控件可以在一次交互过程中向多个目标发送多个不同的动作。如需进一步了解iOS应用程序的目标-动作模型,请查看iOS事件处理 指南。
绘画及打印支持
为支持UIKit渲染需要,UIKit的绘画能力经过适当的调节。它支持图片的加载和显示、字符串显示、颜色管理、字体管理以及多个用于渲染矩阵和获取图 形上下文的函数。UIKit不包含通用目的的绘图类,因为iOS系统使用其他方式完成此类功能(即Quartz和OpenGL ES)。
iOS系统部支持打印功能,iOS设备不能连接打印机或其他相关的打印硬件。
如需进一步了解图形和绘图方面的信息,请查看iOS视图编程指南。
文本支持
撰写电子邮件和记事本是iOS系统提供的主要的文本支持。UIKit类可以让应用程序显示并编辑简单的字符串和稍微复杂点的HMTL内容。
在iOS 3.2及后续系统中,Core Text框架 和UIKit框架提供更加精密的文本处理能力,您可以通过这它们实现更精密的文本编辑及展现视图,也可通过它们定制视图提供的输入方法。如需进一步了解文本支持相关的信息,请查看iOS文本和Web编程指南。
存取方法的使用和属性对比
UIKit在其类声明中大量使用属性。属性由Mac OS X在10.5版本引入,是AppKit框架大量的类创建出来以后才出现。属性不是对AppKit框架getter和setter方法的简单模仿,而是被 UIKit用于简化类接口。如需了解属性的使用方式,请查看Objective-C 编程语言中的“属性声明”。
控件和单元
UIKit控件不使用单元。单元被Mac OS X作为视图的轻量级替代物。但是UIKit视图本身就是非常轻量的对象,因此单元派不上用场。虽然在命名约定上,UITableView类也用到了单元这个词,但是此处的单元实际上是UITableView的子类。
表视图
iOS系统的 UITableView 类可以看成是AppKit框架中NSTableView和NSOutlineView的折中物。它结合Appkit框架中者两个类的特征,更适合在小屏幕 上显示。 UITableView一次显示一列数据,而且您将相关的行组合成一个区段。UITableView也可用于显示并编辑分层列表数据。如需进一步了解 UITableView类,请查看UITableView类参考。
菜单
几乎所有iOS应用程序的命令集都比类似的Mac OS X应用程序小得多,因此,iOS不支持菜单,通常也用不到菜单。对于需要少数的命令的场合,使用工具栏或者一组按键更加合适。对于需要数据菜单的场合,使 用拾取器或导航控制器界面通常更合适,而如需对上下文敏感的菜单,则可其中的菜单项显示在Edit菜单,用它们替代或补充剪切、复制或者粘贴等命令。
Core Animation 层
在 iOS系统中,所有外表的绘制都由Core Animation层实现。该框架还隐式为许多视图相关属性提供的动画支持。由于这种内建的动画支持,您就不需要在代码中显示使用Core Animation层,只需更改一下视图的某些属性即可实现大多数动画。只有当需要对分层进行精确控制或者不想将某些特征暴露于视图层,您才需要直接使用 Core Animation。如需了解将Core Animation层整合到iOS绘图模型的方式,请查看iOS视图编程指南。
如需了解UIKit的类信息,请查看UIKit框架参考。

表 6-2  iOS的Foundation不具有的技术
技术
注意事项
元数据和预测管理
iOS不支持Spotlight 元数据和搜索预测,因为iOS不支持Spotlight。
分布式对象和端口名称服务管理
iOS不存在分布式对象技术,但是您可以使用NSPort家族类和端口(及socket)进行交互交互。您也可以使用Core Foundation和CFNetwork框架处理网络需求。
Cocoa绑定
iOS不支持Cocoa绑定,而是使用经过少量修改的目标-动作模型。因为这种方式可以让代码对动作的处理方式有更多的灵活性。
Objective-C垃圾收集
iOS不支持垃圾收集,您必须使用内存管理模型。您需要通过保持对象来宣告对对象的拥有权,并在不需要对象的时候释放对象。
AppleScript支持
iOS不支持AppleScript。
iOS系统的Foundation框架提供对XML的支持,您可以通过 NSXMLParser 类解析XML文件,其他解析类(包括NSXMLDocument、NSXMLNode)不受支持。除了NSXMLParser之外,您还可以使用 libXML2库,这是C语言的XML解析接口。

如果需要了解哪些类存在于Mac OS X而不存在于iOS,请查看位于Foundation框架参考中的“Foundation 框架”的类层次图。

其他框架的改变
表 6-3列出iOS其他框架的关键差异。

表 6-3  同时存在于iOS和Mac OS X的框架之间的差异
框架
差异
AddressBook.framework
该框架接口可用于访问用户的联系人信息。虽然名称相同,但是此框架的iOS版本和Mac OS X版本却有很大的区别。
在iOS系统中,除了访问联系人数据的C接口,您还可以使用Address Book UI框架提供的类展现标准联系人挑选和编辑界面。
如需进一步的信息,请查看Address Book框架参考。
AudioToolbox.framework
AudioUnit.framework
CoreAudio.framework
在iOS系统中,这些框架支持音频录制、播放以及单声道和多声道的音频内容混合,但不支持更高级的音频处理功能和定制音频单元插件。不过iOS系统增加了 一个功能,即触发iOS设备(具有相应硬件)的震动功能。如果需要了解如何使用音频支持,请查看iOS应用程序编程指南中的多媒体支持 。
CFNetwork.framework
该框架包含Core Foundation Network接口。在iOS系统中,CFNetwork框架是顶层框架,它没有子框架。该框架的接口大部分保持不变。如需进一步信息,请查看CFNetwork框架参考。
CoreGraphics.framework
该框架包含Quartz接口。在iOS系统中,Core Graphics框架是顶层框架,它没有子框架。使用Quartz创建路径、渐变、阴影、图案、图像以及位图的方式和Mac OS X系统完全相同。不过有一些Quartz的功能(包括PostScript支持、图像来源和去向、Quartz显示服务支持、Quartz事件服务支持) 不存在于iOS系统。如需进一步信息,请查看Core Graphics框架参考。
OpenGLES.framework
OpenGL ES 是专为嵌入式系统设计的OpenGL版本。如果您是OpenGL开发人员,则应该会很熟悉OpenGL ES接口。不过,OpenGL ES接口还是有几点较大差别。首先,它是一套更加小巧的接口,仅支持可以在现有图形硬件有效执行的功能。第二,许多桌面OpenGL可以使用的扩展并不存 在于OpenGL ES。虽然如此,您应该还是能够执行大多数和桌面OpenGL相同的操作。但如果你是在迁移现有的OpenGL代码,则可能需要重写一部分代码,需要使用 iOS系统的渲染技术(不同于Mac OS X)。如需了解iOS对OpenGL ES的支持,请查看iOS OpenGL ES编程指南。
QuartzCore.framework
该框架包含Core Animation接口。iOS大部分 Core Animation接口和Mac OS X相同。但是iOS系统没有用于管理布局约束的类,也不支持使用Core Image过滤器。另外,iOS也没有Core Image和Core Video接口(两者都包含于Mac OS X版本的QuartzCore框架)。如需进一步信息,请查看Quartz Core框架参考。
Security.framework
该框架包含安全接口。在iOS系统中,该框架通过加解密、伪随机数生成以及Keychain保护应用程序数据安全。该框架不包含身份验证或身份验证接口, 也不支持显示证书内容。Keychain接口也是Mac OS X版本的简化。如需了解iOS的安全支持,请查看iOS应用程序编程指南。
SystemConfiguration.framework
该框架包含和网络相关的接口。在iOS系统中,您可以使用这些接口来决定设备如何与网络连接,是通过EDGE、GPRS或是通过Wi-Fi。

内存管理
iOS系统不支持垃圾收集,您需要使用内存管理模型保持、释放或自动释放对象。

和Macintosh计算机相比, iOS设备内存非常有限。因此,您需调整自动释放池的使用,避免创建多个自动释放池对象。另外,请尽可能直接释放对象,不要自动释放。如果您在一个紧凑的 循环中分配了很多对象,要么就直接释放那些对象,要么就在循环代码中的恰当的位置创建自动释放池,并在规则的间隔内释放自动释放对象。等到循环结束再释放 可能会导致内存不足的警告或导致应用程序被系统杀死。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部