理解活在Iphone中的那些App (四)
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 (四)的更多相关文章
- 理解活在Iphone中的那些App (一)
		
关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...
 - 理解活在Iphone中的那些App (二)
		
app是什么,为什么而存在 存在即合理的说法,已经被批臭批烂了.所以,作为一个程序员不能简简单单的因为上面来了一个需求,就完成一个需求.让做一个app就做一个app,只是简单的认为存在即合理,头让写就 ...
 - 理解活在IPHONE中的那些APP (五)
		
为了让App活起来 上一篇简单的说了一下关于IOS的一些事情,现在有必要深入了解一些对于让App活起来比较关键的信息.比如IOS系统的架构,这个我就不赘述了,请移步http://blog.csdn.n ...
 - 理解活在Iphone中的那些App (三)
		
App的生存环境之宏观环境 从用户需求变成一个产品形体的App,是一个曲折的过程.主要的过程大概如此,分析用户需求,从用户需求中提炼出比较重要的部分,然后结合自己的创意,将其转化成产品.投放市场,接受 ...
 - 导出iPhone中安装的APP的iPA文件
		
1.让iPhone连接电脑,打开iTunes,选择本电脑,然后点立即备份. 2.完成上一步的操作之后,选择应用,在iTunes中就会列出你从App Store中下载的应用,自己连接真机调试的应用是没有 ...
 - 如何将IPhone应用软件发布到App Store的
		
转自:http://www.shtion.com/667.html 怎样将IPhone应用程序软件公布到应用程序商店? 2009年10月19日公布 分类: App store, iphone, 手机应 ...
 - IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
		
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
 - [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之一:OBJ格式分析
		
[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之一:OBJ文件格式分析作者:yuezang - iTyran 在iOS的3D开发中常常需要导入通过3DS MAX之类 ...
 - 浏览器中唤起native app || 跳转到应用商城下载
		
前段时间遇到一个小需求:要求在分享出来的h5页面中,有一个立即打开的按钮,如果本地安装了我们的app,那么点击就直接唤起本地app,如果没有安装,则跳转到下载. 因为从来没有做过这个需求,因此这注定是 ...
 
随机推荐
- pureMVC与strangeIoc框架对比
			
前言 最近有机会了解到了StrangeIoc框架,就拿来跟自己比较熟悉的pureMVC进行一下简要的对比.这两套开源框架都是基于MVC模式的扩展,pureMVC是一个跨平台跨语言的MVC轻量级应用框架 ...
 - C# SocketUdpServer
			
public interface ISocketUdpServer { void Start(); void Stop(); int SendData(byte[] data, IPEndPoint ...
 - developer.android.google.cn
			
Android Studio官方 Android IDE https://developer.android.google.cn/studio/index.html 探索 Android Studio ...
 - TabControl 选项卡控件
			
TabControl 控件是由System.Windows.Forms.TabControl类提供的,作用就是讲相关的组件组合到一系列选项卡页面上. MulitiLine 属性用来设置是否显示多行 ...
 - C# Winform程序CPU占用高的原因和解决方法
			
程序CPU占用高的可能原因: 1.存在死循环: 为什么死循环会导致CPU占用高呢? 虽然分时操作系统是采用时间片的机制对CPU的时间进行管理的,也就是说到了一定时间它会自动从一个进程切换到下 ...
 - Spring 学习(五)--- 事务(未完成)
			
问题 : Spring 事务传播机制是怎么样的,在什么应用场景使用 事务是什么 我们使用的框架可能是Hibernate/JPA或者是Mybatis,都知道的底层是需要一个session/connect ...
 - 三分钟理解Java中字符串(String)的存储和赋值原理
			
可能很多Java的初学者对String的存储和赋值有迷惑,以下是一个很简单的测试用例,你只需要花几分钟时间便可理解. 1.在看例子之前,确保你理解以下几个术语: 栈:由JVM分配区域,用于保存线程执行 ...
 - 最大行走路线问题(DP)
			
在一个NxN的棋盘上,每个格子里有若干个棋子,假设起点为左上角的格子,且每次只能向下或向右走一格,问怎样走才能得到最多的棋子. 这是很简单的递推题了. 因为只能向下或者向右,所以其实我们可以把棋盘看成 ...
 - 插件式WebApi服务及自动生成Api帮助文档
			
上一篇博客中,讲到了将WebApi Host到控制台和IIS,本篇总结一下如何将WebApi的Service以插件的形式进行动态部署,并设置Hoster的首页显示Api帮助文档,当然,也包括动态部署进 ...
 - sql: Oracle 11g create table, function,trigger, sequence
			
--书藉位置Place目录 drop table BookPlaceList; create table BookPlaceList ( BookPlaceID INT PRIMARY KEY, -- ...