App生存环境之宿主环境

  终于开始说一些技术性的话题了,从这里开始的一些技术细节的东西,以前我也没有太刻意的注意过。为了写这个也是刚刚看了一点资料,如果有纰漏,恳请指出。

  一个App生存的宿主环境主要分成两个部分,一个是硬件环境。一个是软件环境。在IOS的生态圈中,这两个环境相对于Android来说是比较封闭的,但是,得益于封闭。整个系统的兼容性和稳定性远远高于Android。没有那么多的碎片化的设备,没有那么多的硬件配置,没有那么多的私自改造的Api,也没有让人痛苦不堪的各种大小的屏幕。你的App在部署到用户机器上的时候,能够为用户带来视觉和交互上高度的一致性。你的App要么生活在Iphone中,要么生活在Ipad,或者itouch中。但是都是活在一个叫做IOS的系统中。

  先从硬件讲起吧,先看个图(有图有真相)。

  从这张图中我们能够非常直观的看到几乎所有运行IOS系统的硬件性能指标。这些硬件性能,决定了你的App的性能上限。对于专门开发App的应用层程序开发者来说,可能对硬件的性能指标已不是很关心了。而且,在这张图中我们也能够看出,最近几年,IOS设备的硬件性能也是突飞猛进。越来越人觉得硬件再也不是什么限制性因素。因而也多少有点被忽略的意思,但是对应用层的开发者来讲,可能不需要知道,CPU的具体的排线和实现原理,也不需要知道内存颗粒的实现技术。但是程序打交道的几个主要部件的性能我们还是需要关注一下的。按照冯诺依曼的模型,有四个主要部件的性能还是得多多少少知道一些。

  CPU:程序运行的地方,是设备的运算核心和控制核心。你的App变成指令后就是在这里活动。苹果主要使用基于Arm架构的处理器。在最初的设备中,还只是单核的Arm处理器,后来变成了2核处理器。多核能够为你的App带来更好的并发性能。当然,随着处理器本身性能的提升,单位时间内你的App能够做的事情也越来越多。本来一分钟内,你的app可以数100个数,到了Iphone5上后,就可能能数1000个数了。

  内存:App在运行时存储自身和所需要资源的地方。打个比方,就像是App的弹药库,但又不止是弹药库。是你的App的临时性记忆存储体。他的容量越大,也就意味着单位时间内能够load进来的数据量就越多。随着数据量的增多,程序的性能就会越好。不用浪费很多的时间去低速存储设备后,龟速的Loading数据。

  I/O:数据持久化的地方。永远记录着一些App让它记住的东西,直到因为某些非人力无可抗拒的因素被毁掉,比如恶心的快递暴力分拣。他时你的App的后勤。

  屏幕:这可是脸啊。如同看一个妹子,你先看到就是这张脸。而IOS设备的屏幕,也是apple一直标榜的。不过说真心话,iphone的大猩猩屏的确刚刚的。色彩丰富,而且抗摔。题外话了。言归正传,对于应用层的开发来见。我们在幕后做的所有的努力都是为了,最后我们的App是以怎样的形象展现的在用户面前的。然而,关于界面元素的布局,大小,图案,配色等等关键性因素却是由UI来决定的。而我们能够做的,就是尽最大的努力,还原UI的设计。从开发层面讲,需要我们关注的可能只是屏幕大小了。其他的一些细节指标,没有太大的关注价值。

  

  说完了硬件,那么再说说软件。那个当然得从最核心的操作系统——IOS说起。IOS与Mac OS一样都是以Darwin为基础的。而Darwin是以FreeBSD为基础构建起来的微内核结构操作系统(那个继续这么一个名词一个名词解释下去,真的没完了,关于微内核和宏内核的区别,还是自己Google吧)。所以IOS也是一个类Unix操作系统。如果你以前是Linux用户,在IOS设备越狱之后,你会灰常开心的发现,各种命令行都能用,什么ls了,ln了。而且,有大神级任务,在越狱的Iphone上跑LAMP,这才是真正的“移动”互联网啊。知道了IOS其实也是一个类Unix操作系统后,我们就能干很多比较高端的事情了。比如事情一些比较底层的系统命令来提高程序性能。最近网上一个比较火的开源图片缓存库FastImageCache就使用了memsy和mency(https://github.com/path/FastImageCache)。以前看过一个大神的微博说,性能就在那里,只要你死扣IO,死扣CPU死扣一切,性能就来了。

  操作系统是我们的程序与硬件之间的中间层。它为我们屏蔽掉了那些繁琐的硬件操作,只给了我们简单明了的函数接口。同时也是我们的App运行时最为关键的虚拟环境。他更像是IOS硬件设备的一个地方官,而我们的App就是其中的一个子民。App的生老病死以及一切都是受到IOS的管辖的制约。IOS给你的App分配资源,也会在你的App贪得无厌的消耗了过多资源之后对其执行死刑。所以,要时刻记住,生活在这个圈子里的不只有你自己的App,还有一个至高无上的操作系统。其实,app与操作系统打交道,也是通过那些一定订好了的函数接口。app虽然有生命周期,但是他不是智能的。他知道的所有事情,都是程序员写死在里面的。

  而关于IOS操作系统的更多的细节,可以参加apple 官网。

理解活在Iphone中的那些App (四)的更多相关文章

  1. 理解活在Iphone中的那些App (一)

    关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...

  2. 理解活在Iphone中的那些App (二)

    app是什么,为什么而存在 存在即合理的说法,已经被批臭批烂了.所以,作为一个程序员不能简简单单的因为上面来了一个需求,就完成一个需求.让做一个app就做一个app,只是简单的认为存在即合理,头让写就 ...

  3. 理解活在IPHONE中的那些APP (五)

    为了让App活起来 上一篇简单的说了一下关于IOS的一些事情,现在有必要深入了解一些对于让App活起来比较关键的信息.比如IOS系统的架构,这个我就不赘述了,请移步http://blog.csdn.n ...

  4. 理解活在Iphone中的那些App (三)

    App的生存环境之宏观环境 从用户需求变成一个产品形体的App,是一个曲折的过程.主要的过程大概如此,分析用户需求,从用户需求中提炼出比较重要的部分,然后结合自己的创意,将其转化成产品.投放市场,接受 ...

  5. 导出iPhone中安装的APP的iPA文件

    1.让iPhone连接电脑,打开iTunes,选择本电脑,然后点立即备份. 2.完成上一步的操作之后,选择应用,在iTunes中就会列出你从App Store中下载的应用,自己连接真机调试的应用是没有 ...

  6. 如何将IPhone应用软件发布到App Store的

    转自:http://www.shtion.com/667.html 怎样将IPhone应用程序软件公布到应用程序商店? 2009年10月19日公布 分类: App store, iphone, 手机应 ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  8. [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之一:OBJ格式分析

    [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之一:OBJ文件格式分析作者:yuezang - iTyran     在iOS的3D开发中常常需要导入通过3DS MAX之类 ...

  9. 浏览器中唤起native app || 跳转到应用商城下载

    前段时间遇到一个小需求:要求在分享出来的h5页面中,有一个立即打开的按钮,如果本地安装了我们的app,那么点击就直接唤起本地app,如果没有安装,则跳转到下载. 因为从来没有做过这个需求,因此这注定是 ...

随机推荐

  1. 利用jquery的ajax实现跨域,内部其实是jsonp协议了,不是XHRhttp协议

    一.同源策略 要理解跨域,先要了解一下“同源策略”.所谓同源是指,域名,协议,端口相同.所谓“同源策略“,简单的说就是基于安全考虑,当前域不能访问其他域的东西. 一些常见的是否同源示例可参照下表: 在 ...

  2. [转]从客户端中检测到有潜在危险的Request.Form值的详细解决

    本文转自:http://www.knowsky.com/887593.html asp.net1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用之类的输入影响页面返回结 ...

  3. JavaScript插入节点小结

    JS原生API插入节点的方式大致有innerHTML.outerHTML.appendChild.insertBefore.insertAdjacentHTML.applyElement这6种. 这里 ...

  4. VS设置护眼色

    打开vs2013 选项 环境...如图所示

  5. 九、双端队列LinkedBlockDeque

    一.简介 JDK通过BlockQueue阻塞队列实现了生产者-消费者模式,生产者向队列添加数据,消费者从队列里面消费数据. 但是在有些场景里面,我们是无法区分生产者消费者的,或者说既是生产者,也是消费 ...

  6. 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2

    转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...

  7. The configuration section 'system.serviceModel' cannot be read because it is missing a section decla

    将Asp.Net 2.0的Web Site搭建在IIS7(7.5)上时,运行出现500.19错误, 错误提示为 The configuration section 'system.serviceMod ...

  8. spss C# 二次开发 学习笔记(六)——Spss统计结果的输出

    Spss的二次开发可以很简单,实例化一个对象,然后启用服务,接着提交命令,最后停止服务. 其中重点为提交命令,针对各种统计功能需求,以及被统计分析的数据内容等,命令的内容可以很复杂,但也可以简单的为一 ...

  9. MIME格式说明,电子邮件格式(转载)

    邮件格式说明 Mutiple Internet Mail Extensions Refer to Internet Official Protocol Standards RFC 822 1 概述 网 ...

  10. .NET 垃圾回收浅解

    在说明垃圾回收的实现机制之前,先说明一下垃圾回收存在的背景. 垃圾回收器(GC)是.NET平台中一个很重要的组成部分,.NET垃圾回收机制降低了编写程序的复杂程度,使程序员不用耗费精力去处理析构,成功 ...