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. Node.js事件驱动模型

    一.传统线程网络模型 在了解Node.js事件驱动模型之前,我们先了解一下传统的线程网络模型,请求进入web服务器(IIS.Apache)之后,会在线程池中分配一个线程来线性同步完成请求处理,直到请求 ...

  2. 如鹏网学习笔记(九)JavaScript

    JavaScript笔记 一.JavaScript简介 1,JavaScript是一种计算机编程语言,可以像等其他编程语言那样定义变量,执行循环等. 2,JavaScript代码主要执行在浏览器上,为 ...

  3. SOA(面向服务架构)——踩坑后反思:这样值得吗?

    SOA(面向服务架构)——踩坑后反思:这样值得吗?

  4. [javaSE] 集合工具类(Collections-sort)

    java为我们提供了一个集合的工具类,方便我们对集合进行操作,里面的方法都是静态方法. Collections.sort()方法,参数:List<T>集合对象,这个对象带着泛型,是为了保证 ...

  5. SSM迁移到Springboot记录

    日志问题 Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a ...

  6. Code Signal_练习题_alternatingSums

    Several people are standing in a row and need to be divided into two teams. The first person goes in ...

  7. RN canvas画布大小之谜

    一.需求 在一个高640.宽360的canvas内画一些坐标点. 二.问题 坐标点只显示了一部分,剩下的点没显示(其坐标属于(640,360)区域). 三.原因 canvas默认的画布大小是高150, ...

  8. 如何用Fireworks制作经典的扫光字GIF动画

    1.首先我们把背景选为黑色.再输入文字用白色填充,注意调整文字之间的间隔. 2.选中字体,对其进行转换为路径文件. 3.对间隔再做少许调整. 4.复制文字改为黑色,做平移,出现立体效果. 5.再复制一 ...

  9. Linux下vim(文本编译器)的使用

    vim (文本编译器): Vim是从 vi 发展出来的一个文本编辑器. vim的一些命令操作: 插入命令: a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行 ...

  10. flask多线程多协程操作

    local的作用:各个线程各开辟一块空间互不影响 基于local""" import threading from threading import local impo ...