Mac iOS区别
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设备内存非常有限。因此,您需调整自动释放池的使用,避免创建多个自动释放池对象。另外,请尽可能直接释放对象,不要自动释放。如果您在一个紧凑的 循环中分配了很多对象,要么就直接释放那些对象,要么就在循环代码中的恰当的位置创建自动释放池,并在规则的间隔内释放自动释放对象。等到循环结束再释放 可能会导致内存不足的警告或导致应用程序被系统杀死。
Mac iOS区别的更多相关文章
- 【ionic】Mac IOS下真机调试
模拟调试不能保证真机一定没问题,所以真机调试是非常必要的一步 IOS设备 启用设备调试 在IOS设备中(Iphone,Ipad)中开始web检测器 设备->safari->高级->w ...
- webRTC源码下载 Windows Mac(iOS) Linux(Android)全
webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw 提取码:wl1e Windows版:visual studio 2017工 ...
- OAuth 2.0:Bearer Token、MAC Token区别
Access Token 类型介绍 介绍两种类型的Access Token:Bearer类型和MAC类型 区别项 Bearer Token MAC Token 1 (优点) 调用简单,不需要对请求进行 ...
- 编译boost到各个系统平台 mac,iOS,linux,android,wind
编译boost到各个系统平台 mac,iOS,linux,android,wind git地址:https://github.com/czjone/boost git仓库:https://github ...
- 游戏制作之路:一个对我来说可实现的High-end的Mac/iOS游戏制作大概计划
对于学习一些东西,我比较习惯任务驱动式的学习,也就是说,要事先订好一个目标,要做什么东西,达到什么效果,然后根据自己了解的知识作一个可以实现这个目标的计划. 现在要学的是游戏制作,而且是High-en ...
- 【 强大的Mac/iOS开发工具】AppCode for Mac 2017.3
[简介] 最新的 AppCode 2017.3 版本,完全支持最新的Swift 4.0语言,这是一款JetBrain出品的强大的OS X 和 iOS开发工具,AppCode可以用于开发 Mac OS ...
- Mac iOS Mac Watch 应用和游戏编程开发工具推荐
今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会 ...
- linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...
- 尝试在Mac/iOS上使用tcmalloc库
概述 TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配.它具有现代化内存分配器的基本特征:对抗内存碎片. ...
随机推荐
- Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理
一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...
- Spring Boot 快速整合Swagger
一.前言 Spring Boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- The Ninth Week (Lucklyzpp)
The Ninth Week (Lucklyzpp) 1.简述DNS服务器原理,并搭建主-辅服务器. [10:36:39 root@lucklyzpp ~]#vim /etc/named.conf ...
- layui表格-template模板的三种用法
问题情境: layui中将数据库数据通过layui table渲染到前端表格,非常简单,但是如果数据库存储的信息不能被直接展示,项目中该页面有好几个这样的字段,会员类型,支付类型,会员时长还有平台类型 ...
- 《Python语言程序设计》【第2周】Python基本图形绘制
实例2:Python蟒蛇绘制 #PythonDraw.py import turtle #import 引入了一个绘图库 turtle 海龟库--最小单位像素 turtle.setup(650, 35 ...
- 【JAVA】笔记(7)--- 数组精讲
数组的静态初始化: 1.一维数组: int [ ] arr = { 1,2,3,4 } ; Object [ ] arr = { new Object ( ) , new Object ( ) , ...
- go微服务框架Kratos笔记(一)入门教程
kratos简介 Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具 本文基于kratos v2.0.3,windows平台,其他系统平台均可借鉴参考 环境搭建 Golang开发 ...
- [atARC099F]Eating Symbols Hard
记操作序列为$S$,令$h(S)\equiv \sum_{i}a_{i}x^{i}(mod\ p)$(其中$a_{i}$为操作后的结果) (以下我们将$S$看作字符串,相邻即拼接操作) 对于操作,有$ ...
- ICCV 2021口罩人物身份鉴别全球挑战赛冠军方案分享
1. 引言 10月11-17日,万众期待的国际计算机视觉大会 ICCV 2021 (International Conference on Computer Vision) 在线上如期举行,受到全球计 ...
- 接上篇:Git Worktree 高级使用,这样清爽多了
前言 上一篇文章 Git Worktree 大法真香 带大家了解了 git worktree 是如何帮助我同时在多个分支工作,并且互不影响的.但是创建 worktree 的目录位置不是在当前项目下,总 ...