xcode svn自带地图不能解析国外经纬度 怎么解决

TUP第五期移动开发者沙龙现场演讲实录
发表于 16:42|
摘要:9月18日下午,CSDN TUP第五期移动开发沙龙在北京举行,沙龙邀请了三位来自国内一线的知名移动开发团队分享他们在创业和开发中的实战经验。在首场演讲中,作为国内最早一批iphone应用创业团
9月18日下午,CSDN TUP第五期移动开发沙龙在北京举行,沙龙邀请了三位来自国内一线的知名移动开发团队分享他们在创业和开发中的实战经验。在首场演讲中,作为国内最早一批iphone应用创业团队,139.me创始人朱连兴主要讲了移动创业者普遍遇到的三个问题:如何有效应对创业过程中的资金和人才问题?如何寻找应用灵感和创意?如何使自己的产品在20W应用中脱颖而出?
139.ME朱连兴演讲实录
139.me创始人朱连兴
现在国内开发者生存情况都不一样,我们把自己的一些生存经验和大家做一个分享,希望对大家有点借鉴。在做分享之前,我给大家讲一讲自己公司的经历,我们是08年8月份开始做苹果应用开发,06年时我们在做小游戏,08年开始iphone开发,7月份App Store推出,当时苹果手机保有量1500万,我们感觉市场空间非常大,我们就把以前的网游停下来专心做iPhone开发。
第二个时间点是09年6月份,在08年的8月份到09年6月份我们在做自己研发和外包之间有过一些波折,也有一些心理斗争,我们最早是做三四款软件,在App& Store也可以赚钱,一个月一个软件能卖两三千人民币,但是我们成立这个团队的目的是想做一些比较感到骄傲的事情,所以这个收入我们觉得太少了,不是我们想要的,在我们比较犹豫的时候有很多人找到我们,在08年的年底的时候,一家日本公司转包给我们,他接美国包让我们在两个月内做外包,我们接下来,当时他报出的钱比我们写应用软件要多很多,没想到经过大家努力我们大年初四把做好的游戏给了老外,但是由于金融危机老外并没有将钱付我们,但是公司的情况就很被动。
在09年年底,我们不断反思,尽管做外包,我们一个项目能赚到几万到十几万,但是我们感到这不是我们想要的,在09年3月份我们决定还是要做原创产品,做原创研发,从那时起就开始开发我们的产品,到6月份通过App& Store的应用已达到6万,但是我们的软件传上去以后销量还不错,第一天卖了300美金,以后每日陆续往上升,基本稳定在一天一千美元左右,做应用软件可以一劳永逸坐着收钱就可以了。
随着整个市场不断的变,现在苹果应用数量20万到30万之间数量,在App Store上成功越来越难,有很多人问我139.me就做一款游戏&&水族箱吗?这个期间我们做什么,我来说明一下。因为暴雪是我们比较崇拜的一个公司,我们非常喜欢暴雪十年磨一剑的精神,所以也想多花一些时间,尽力做一个让我们自己觉得拿得出手的游戏,所以一年多以来我们做了三款游戏,10月初我们会发布一款游戏,10月中旬下旬会发布另一款。自己做开发确实很艰难,不管市场怎么样,我们对自己的产品还是充满很大的希望的。
目前国内开发团队的情况大家应该有所了解,基本有三种出路,第一是做研发的,第二是做外包,第三是做培训的。
研发也分两种,一种是独立的团队,专注于自己做应用拿到App Store卖。还有一种来自腾讯、有道这样的大公司,不在乎赚钱不赚钱,做应用只是为了产品延伸。
另外就是做外包,现在整个产业情况跟我们早期的时候已经不一样了,最开始只有一条路,做产品到应用商店卖,现在我们感觉整个产业来了,许多相关的机构都找到139.me帮助他们解决一些问题,现在外包的市场是非常大的一个市场,虽然这个市场很多VC不看好,但是我觉得对于一个成长型公司,外包的收入可以让你活下去,活下去是很重要的,我接触到的很多风投说139.me既做研发,又做外包,他们都表示对这种不专一的公司不感兴趣,但我们从06年到08年没有赚钱,公司一度非常艰难,我们知道自己是怎么活下来的,我们做了很多权衡取舍,我们对生存理解远远比VC深刻很多,他们无所谓。但如果你没有资金资源只能在研发和外包做一个权衡,据我们统计,一款产品的研发周期需要6个月到8个月,资金投入要20万,所以说应用研发对一个小公司是战略动作,要知道一个公司不赚钱坚持不了两年。
第三种情况是做培训,这个领域比较知名的企业是博看文思,很多人做研发觉得赚不到钱就转型做培训这也是一种生存状态,我觉得国内的开发团队,大家生存情况无外乎这三种形式,我们是研发外包培训都做。
我们需要自己培养技术人才,因为在中关村这个技术圈已经很浮躁了,本身学研发的人很少,招来的比较好的程序员经过我们带出来,结果被腾讯挖走了,我觉得很无奈,也有其他员工也跳到开心网,人才很紧缺,所以我们又回到高校,自己培养人才做外包,好的人才做研发,形成一个链条,外包收入可以支持研发团队,这种阶梯式布局可以支撑我们的稳定发展,我们也可以集中精力到研发上。
接下来给大家看一个小东西,反应了我们对市场的一点认识。去年冬天,我认识了央视主持人乔老师,她找到我以后要求帮她做新媒体,她最初的表达是&我要做女人的东西&,她说她找到很多人,都不认同她,不和她合作,认为她的想法不现实,我跟他深谈了几次,刚开始她讲得很笼统就说我就想做女人的东西,我说你到底想做什么。最后,她说想做一个女人衣柜放在苹果的手机上,再具体一点,她说我要做一个App,可以让女性把自己的衣服比如说上衣,牛仔裤鞋子拍下来放在手机里面,我说这有什么意思,她说男人想不到女人会怎么想,男人想不到我们有多么空虚无聊,有这个应用女人真的会把衣服拍下来放在手机上,逛商场的时候看到一条牛仔裤,想不起来家里有没有,但是这个时候可以拿手机看一看,家里还有38条牛仔裤,但是买不买,作为女人还得买,因为作为女人和男人不一样,我觉得这个观点太好,她说做IT只会从二维角度,技术层面想一些东西,你们这个世界尤其IT世界是男人的世界,但是没有真正站在我们女性立场替我们考虑过我们想要的东西。
我觉得豁然开朗,App Store的市场也好,创意也好,乔老师站了一个社会学的角度,我们一直站IT的角度看这个问题,我觉得这个观点很好,我们这个合作正在继续,我觉得角色转换可能会找到一些比较好的一些点。
第二个要介绍的应用是目前排名第一的愤怒小鸟,这个软件为什么能够成功呢,开始的时候我说这个有什么意思,能卖到App Store第一,我就玩了一玩,发现前两关很好,但是到后面越来越难,这个软件的成功是在市场受众群体成功,单从游戏娱乐性和技术层面讲它可能是一个很一般的游戏,为什么这个游戏可以成功,因为iphone手机用户不仅是30多岁,20多岁做IT的。玩这种游戏可能儿童,女性,前两天有人提到一个GQ概念,游戏智商,由于iphone的人并不是游戏智商很好,但是iphone用户不是这种人,是任何人都有可能玩这个游戏,第一就是这个产品受众很宽泛,第二这个软件是用户的成功,第二是就是它用户体验非常好,因为iphone有很多公司做过很多射击游戏,塞车游戏为什么没有排App Store第一名,很多原因还是站在做IT角度考虑这个问题,操作起来不是非常容易,易用性和市场受众广泛市场才使得愤怒小鸟获得成功。
第三就是塔防游戏,我去无锡的时候跟一个朋友坐飞机发现这个游戏很好玩,我的朋友从飞机上到酒店一直玩,到回来还玩,这个游戏可能是比较适合我们做IT或者玩游戏的人,受众群体又不一样,这个游戏就比较专业化,从玩家角度讲是更专一点的游戏,通过这几个想法也好,市场定位也好,我想告诉大家,App Store上面有20万个应用,怎么使你的软件卖得好,就是不妨转换一下角色,不要总是以男人的世界或者站在IT的角度,可能换一个角度会打开另外一片天空。
很多人问139.me一直没有最新产品出来,我们最近6个月一直做这个东西,是个ipad音乐游戏,要在十月初发布,我们是向TOP排名的目标去的,我们至少能做到ipad里面的TOP,这个软件我们在10月份发布,我们会搞一个象样的新闻发布会。
最后讲一下我们公司发展情况,我们这个团队是从大学走出来,日到北京,我们在保定有一个分公司,在河北金融学院有一个大的研发基地,整个公司大概30人左右,最近无锡市政府给了我们一千平办公场所给了我们很大的支持,准备在无锡搞一个100人规模外包基地,我们在苏州大概在两个月之内会在那边搞一个游戏的研发基地。其他的人才培养也会在河北大学做起来,像刚才所说,我们是站一个产业角度做这个事情,把人培养出来以后,会主要做外包,其中优秀的我们选拔出来做游戏研发,大致是这么一个发展思路。
有道高级工程师范怀宇演讲实录
大家好,很高兴给大家分享一下Android应用开发经验,我们公司是网易旗下的网易有道,主营业务是搜索和广告,以及一个比较传统的产品就是有道辞典,还有一个新方向就是电子商务购物搜索,还有就是移动方面的一些应用,我们在移动方向的主要目标是做手机上最好的免费服务,我们首先专注于移动互联,比如说我们应用是和互联网打交道,App Store是手机前端,用延伸客户端提供很好的接口,我们做的应用希望面对大众,不会做比如外包这样的事情,主要应用都是针对所有的用户,目前所有应用都是的免费下载,产品情况还是以做企业品牌为主,也会想盈利模式,但是基础方向是说不像广大的普遍用户收费,还是一个传统网络平台模式,可能会做一些网络广告之类的模式。
现在我们做的产品有三款,一个是有道词典手机版,线上运营已有两年多,是我们用户最多的产品,基本上市场面所有的手机都可以支持,在symbian系列占了50%份额,Java老的应用占的30%左右,Android应用是8%,iPhoen和ipad占7%,8%,大家可以从中体验出目前移动互联网手机移动平台大概的分布情况。
另外我们还有一个产品是网易传统产品是网易邮箱在手机上的应用&&网易掌上邮,支持离线存储下载和推送功能,在畅通情况之下可达到秒级别的推送到手机上,这个产品也运营了大概有一年左右,现在版本是V3,其次就是因为这个应用特征偏商业,用Android会多一些,份额占到1/4左右,最近我们上线了一个产品,是基于LBS和移动SNS的,这个东西我们想了很久,从想开始到做有半年时间,终于上线了,目前来说没有什么太多的统计数据,这个客户端会写几十个,上百个UI工作非常大,这个是我们做过的一些产品。
今天主要想跟大家分享是偏技术一些的一些主题,关于Android应用开发我个人的一些经验,首先,我觉得Android最大不同一点就是Android的应用模型,我一直认为一个平台应用模型决定了这个平台的所有,应用模型定义了一个应用按照什么模式开发。Android是一个典型的基于组件的应用模型,做应用跟搭积木一样,Android有很多组件,所有应用是由四个组件拼起来,可以从不同类别里拿组件,串在一起运行其他进程,传统串联方式是消息一个东西给一个东西发消息,这样模式有一个局限是发送者必须知道接受者是谁,在Android里面是有一个第三方介入通信组件管理服务,接受方接受的时候会知道我用什么数据,要给你什么结果,对于组件管理服务就是一个协议,你不是直接发送调用使用者,首先是组件管理服务他会对你的请求做解析,然后判断你需要什么东西。
这样应用模型下就有一个比较显著的特点&&高度复用,可扩展性强。还有一个非常基础特点是跨进程跨应用,把消息打包,在解析方拆包,不在乎调用者和实现者是不是在一个进程或者一个应用里面,有原生的跨进程特点,Android做开发,很多时候用你的进程可能说不清楚,对于用户不知道你用的组件,开发当中唯一能够感知就是组件,这个模型下有一些经验,首先要充分复用组件,当然也有其他一些问题,比如系统上没有这个组件怎么办,想要一个东西,但是系统没有,你必须利用网络服务,在Android里面你可以采用了一种把Web和本地应用界限模糊,内嵌浏览器足够强大,可以保证你应用都可以实现,我们要查一个位置地图,在国内定制机没有订购谷歌,这样模式不要用传统方式调用一个地图,要构建一个网址发起这样一个请求,系统没有服务调用是一个页面,最坏情况之下好歹有一个页面看地图,除此之外还有一种解决方法,如果你觉得系统可能会没有这个组件,提供最差实现,比如说看图,就是看图,不能分享,缩放,一旦系统上什么看图软件都没有,用最简单做,不要花太多精力在这个上面,提供最低服务,同时可以用系统最好的其他的组件服务整合,还有一点更可怕是说不按牌理出牌,在Android应该做什么协议规定,你应该怎么做,但是很多时候一款应用开发了一些对外组件完全不按照协议做这个是最可怕的,是对Android生态系统一个破坏,你明明但是你代用以后不是做这个事,一旦要实现一个组件跟别人应用一定要按照标准实现所有方法,一定不要提供一个做了一半或者不合规矩就放出去,你这样做,别人也这样做,Android就废掉了。
另外一个是说我们在Android开发里面,虽然我们只有组件不需要关注其他细节,很多情况之下为了效能效率要关注这些东西,比如说在Android里面一个默认系统进程是这样的,这是你的进程,运行起来,默认情况之下所有组件运行在你的进程里面,同时有另外一个组件,从第一个组件被构造开始之前,到最后一个组件被销毁。当然在这个模型之下可以有一些问题,配制这个模型,把一个进程可以通过应用进程拆成两个,甚至三个,但是拆分逻辑说你一定要保证同一个进程组建是在逻辑上统一,他们是做一个事情,还有一个参数这个模型是写在自己进程可以让它在调用进程里面找,在每一个调用进程里面都构造一个。可以降低本身应用进程压力,内存压力,可以变得很简单,应用进程有一个长期存活的东西,就是application可以做一些数据存储等等。
我觉得要充分利用可以看一些不同应用实现,应用开发就是界面构造,要串各式各界面,Android界面逻辑主要逻辑是activity主要逻辑更倾向于WEB页面是一个黑盒是一个站的形式,跟WEB页面从一个连接到另一个连接,每一个activity整个样式是派生底层配制,本身有不同的配制比如说在MID在平板上面可以展示从不同的UI模型,手机是上面一个状态篮,每一个activity会构造一个windows,这个是用来管理UI事件,产生事件会传到window,从而把消息发送给它。当有控件都是派生view。整个消息分发是自上向下的流程。子控件没有独立存活的能力,除了控件体系,对于Android还有一个最重要的东西是资源体系,所谓资源就是在Android是一个完整资源体系,你看到听到能够感受到界面所有元素都是一个资源,一个 控件可以用资源表示,一个场景可以资源表示,所有东西都可以用资源表示,Android资源体系包括三块,首先是XML资源文件,大小是什么,位置是什么,样式是什么,还有一个特定目录结构也是很重要可以配制一些事情,还有一方面是纯数据文件,文件名就是它的ID。由这三部分构成,整个特征XML带来一个结构化状态,为什么我们不考虑代码写界面用XML,代码是逻辑性很强的,适合表述一些逻辑性的东西,XML本身是一个结构化的,XML有一个大好处适合工具化,我可以很容易做一个工具,画Android界面,如果是基于XML,如果用代码写是不可能的,因为上传工具非常复杂,这样模式之下所以是一个结构化,状态化整个框架,我在代码里面使用资源就是R类是一个目录,是一个编码目录,如果没有R类我们要找一个资源文件,我们要知道资源文件名字这是一个字符串比较,这个是一个很慢的过程,R类把字符串形成一个整形数,原来说他住在中关村海龙大厦现在直接告诉他的经纬度,增加了效率,Android里面什么都可以用自由文件表示,我们知道一个按纽没有按是一个图片,按下去是一个图片,可能要8、9个图,要用代码要写很多无聊代码,在Android可以配合,当这个按纽等于按下可以用哪个,代码可以选择更方便容易,目录结构就是配制各类硬件和软件。Android里面还有一个多头是数字文件,最典型一个数字文件类型是一个Nine&Patch,我们开发中需要一个图片,UI给三个图片,那个是远角拉平铺,在Android里面不这么做,给一个Nine&Patch不要对,当我有需要拉中间某一个区域,这样可以保证里的图形同乡足够的有适配性可以用不同的,在Android里面可以用在很多东西,如果要用都应该用这样的方式提供,对于这方面来说有一些一定要用资源表述界面相关内容,不要说你写一部分资源,一部分代码,因为我们知道界面是一个非常容易变的东西,如果在资源代码有强烈的依赖性相当你改的地方要改多处,对于修改是非常痛苦的事情,只要能用资源做的事情都用资源做,比如说选图片这样会变得很简单,我要改界面风格完全不用用代码,这样模式有一个问题就是效率Android在过到一个进程会初始化一些资源文件是为了以后能够更快访问,随着你资源包越来越大,反映会越来越慢,当我们开发应用进来考虑一些更少,更精简资源文件,我们要用,但是要精简用,比如说一些字串很像就不要用两条就用一条,界面构造尽量使用抽象调用截面方面。
我换成一个图片,你这个代码是一个运性错误,尽量使用抽象代码。还有一个是说Android本身是基于组件,我见过最多错误在于界面逻辑,界面代码和逻辑代码混得很厉害。还有一个是因为代码控制我一直觉得用代码控制界面是一个很不好的习惯,一定用Android方法解决Android的问题,完全两个不同样子界面是放两个activity,把每个界面变化程度分布,不要让界面反复变,发现两个界面变化非常大进来用两个activity或者别的逻辑做。
另外就是应用适配,国内有太多,国外也是一样,太多定制版的Android版本,有道辞典是跑在尽可能多的手机,我们有很多预装,我个人见过起码有十种以上改造过的Android系统,我觉得改造过Android系统比改装车还可怕,你看这个东西很酷,但是不知道像一个定时炸弹一样,他只会自己的UI标准,我设计是符合Android设计标准,控件行为表示完全不一样,还有一个方面也需要适配,那就是不同的软硬件环境,应用不是针对某一款机型就会遇到这个问题。我所有应用大小和分别率硬件系统都是可知的,Android没有这个福气你会遇到各式各样的应用。各个SDK版本,自定义互的变更,专用SDK,各类硬件环境。
如果你的应用用了这样的库在这些手机上就经常不能安装,或者崩溃都有很多,很多人都提供的专用的SDK,会导致你代码完全陷入崩溃,还有应用环境,什么样的手机都见过,什么外设的手机都见过,很多改装机器很多内置应用就是无视规范,你给我一个图片我要放在哪个地方,什么参数完全不遵循,整个系统他们行动变得很怪异,设备一定要做最低版本SDK测试,一定要1.5上做测试,为高版本SDK提供一些更好的支持,比如说SDK大于3用什么接口,大于4小于用什么接口,尽量使用高SPK带来的好处,还要坚持SDK带来的问题,我们也碰到很多UI上你不要依赖任何系统的UI风格,系统会定义一些UI属性,原来我们经常会用这样的标准做一些事情,但是后来发现,在标准版本上跑得很好,但是在定制机上面就不行了,一定要说自己定义每一个控件属性,包括所有属性这个东西大小,宽度,高度,所有一切要自己定义,不要相信系统的默认,一定要自己做这个事情,另外一个就是说UI风格一定要用,比如说有一些固有硬件,但是很多人把Android改成和iPhone一样,完全不一样的用户体验。所以你要尽量不要用一些完全依赖Android机制,在界面本身体现最酷的UI元素,现在很流行点一下弹出来有几项这样东西增加UI本身,可以改进自己应用的适配性。
还有是Android独有的东西,Android组件生命周期,Android有进程托管,我们写一般的应用知道这个是什么时候起来,我们可以掌控,Android为了做了一个全局优化。如果让开发者控制构造起来会重复,为了打造全局效果,这样模型下整个应用托管模型采用策略是给进程分级,是根据表面上是根据组件状态,除了activity分级,所在进程分成前台是服务,后台还有空进程,它的分级是根据用户体验,前三个是应用体验相关,先三个应用过程中的逐渐很可能是用户的足见,可视组件,比如在看主页,我不能阻止,浏览器进程处于可视状态,系统不会轻易忽视,还有服务进程比如说后台的运营播放随着我看不到,但是我能听到,前三个进程是跟用户体验相关的,这样进程下Android不会轻易回收,后台进程和空进程存储是为了效率考虑,构造一个Android是很大的事情,要初始化一系列东西,你第一次使用应用跟第二次是不一样的,后面是非常快,前面是非常慢。除了进程回收还有一部分是组件回收,进程回收力度飞机大,但是有时候进程也会分细节,Android会细分到组件层面,比如说服务器没有人用了,节绑定了还有一些延迟回收在组件站里面,activity回收是Android虚存价值。
为了在托管模型下编程,Android设计了一个叫生命周期的东西,你从一个进程状态变化另外一个进程状态,会告诉你这样所有东西,进程被销毁创建这个进程不能改变都会事先通信你,主要是处理问题,初始化数据和销魂数据,注册和注销,还有持久化数据,控制线程这个东西跟Android这个东西很大,最重要是数据,会回收一个应用,activity组件,但是你觉得这样存放是一个很麻烦,不能把公用头出来贯穿Application它相当于做了数据缓存。它可以用你经常存放的数值放这个地方,Android生命周期模型是一个同步,如果取得了一个线程是异步逻辑,生命周期技术要不要杀它,或者怎么处理,我们开发线程是一个很多的线程应用,要么不管,当你实验做得少不管,。在组件生命周期改革要主动改善,每个线程角色第一号给他们做一些事情,还有一个方面我们要做个后台服务,但是这时候我会系统回收,会断,一个解决策略是用Android定时服务,一分钟唤醒我一次,保持你后台服务有一些唤醒机会,另外一定要作Android模拟器可以什一些开发环境,一定要立即收入模式下进行测试,如果发现问题,因为这个东西测试人员做不了,必须是开发人员自律。开发人员可以很轻松拿到这个场景,我立刻回收组件,一定要让自己应用在这个状态下跑,才能避免说到的线上会出一些很难的问题。
Android应用内存控制,有自己的虚存机制,是基于寄存器,手机上要求门槛高一些,效能也会高一些,是自定义中间码,Android一个进程一个虚拟机,默认值16M,16M是什么概念是,本身跑虚拟机用就Java所以量非常多,在Android也会看到崩溃的情况。在Android里面一些内容管理,GC本来就不是内存管理终结,开一个内存用完了要赶紧回收,但是会慢,还有一个隐蔽性我完全不知道,这样会导致内存压力很大,比如说你写的字符串廉价,Android里面还有一些内容就是CURSOR,网络连接,还有一个特别说的是大内存资源首先是组件,首先是系统控制但是不能干扰组件被回收,此外是一个图内存消耗者,如果你有大量图片在要特别注意,一些解决策略,一定在在我们可知生命周期一定要这样做,还有一些不可知生命周期比如说Cursor为一定要用MnangedCursor管理,还有一个是组件泄露,应该完全不给别的组件用他们的指针,不能有引用关系,所以当你需要给别人东西传一个环境,不要用组件直接传,要用系统传给他,一旦要用线程引用这个东西一定要用Application做,要不然就会发生泄露,在有就是手动释放组件中的资源。如果是bitmap要池化,一开始放50个图,后面降20、10个图,保证你的进程不会由于内存压力崩溃,还有一个方法就是分任务,我们在App Store看到一个组件站,把一个变成两个或者把持续进行调整,一个组件配了很几次,典型运用就是系统浏览器,我们不能让我的系统里面存在两个浏览器,所以一定要配制任务模型,当你发生一个进程扛不住可以拆分成两个进程,拆进程也是一个很好的方式,分进程。我今天主要讲这些,如果有相关技术问题想跟我讨论可以给我发邮件谢谢。
资深iOS开发者刘昕演讲实录
刘昕是中国最早的iOS开发者之一,是《周末画报》(iWeekly)iOS应用技术负责人,《周末画报》目前有80万用户,算是中国用户最多的 iphone应用之一了。他还是基于GAE的社区V2EX创始人,其他应用代表作包括Gomoku和BC2Stats。他在演讲中集中探讨了UI设计、多 线程、平滑效果和测试版本分发等四个iPhone应用设计开发难题。
&今天很高兴能够有机会在这里跟大家分享一下iPhoen开发一些不算是特别大高瞻远瞩性的东西,我个人小小愿望是,希望今天在座iPhoen开发者,你们可能自己困惑的问题,或者说以前搜索但是没有搜到的问题,我今天在这儿讲了对你有帮助我就觉得值了,非常高兴,那我们下来就开始吧。我介绍一下我自己,我目前我是,我们这个工作者我们会自己的一些软件,我们同时做一些外包,第二块我是iPhoen上面的周末画报技术顾问,很多它的实现是由我来提供,最后我目前做一跨运行在运行在creator里面的论坛,这个就是Iweekly周末画报,在今天3月份上线,是一款作iPhoen上面可以阅读周末画报平面内容的,新闻类也有,目前有80万用户,最近刚刚完成技术升级,可以支持iPhoen4,这个有一个很有行的东西,每天流量高峰从我们后台监控是我们睡觉的时候,很多人会作晚上睡觉之前把iPhoen拿出来看一些吃喝玩乐的文章完了以后就睡觉,这个系周末画报,如果还没有安装可以在App& Store里面搜索就可以找到了。
&&& 这个是我个人的作品是在08年10月份在App& Store上线,App& Store里面第一个人工智能五子棋游戏,大家看到这个图已经是2.0版本是一款售价软件售价是2.99,目前有四千次下载,这个是我们在今年完成一个很有趣的新作,今年推出的一个多人SPS游戏战地2,通过我们这个可以看到游戏里面各种数据,我们最近一个新功能,任何多人游戏里面会有一个升级概念,我们这个可以可以给用户看到一条最短升级路线,可以更快升级可以在更快在游戏里面解开武器拿到新能力,这个是PS3恩,跨平台大作,60美元,在全世界有600万正版玩家,我们经过差不多四个月时间,负载到千份之一,同样是2.99收费应用有6千次下载,我们破解的满天飞,算上盗版用户可能有好几万了,以上是关于我做什么,以及我做过什么的介绍。
&&& 下面进入今天正题这个是关于各种技巧,这里会介绍我个人觉得非常实用的东西,第一我会给大家介绍一个东西叫UIKIT,由此相关的一些设计问题,第二会讲很多开发者可能感到特别困惑的,多线程,这个东西在什么时候用,有哪几种用法为要用,中间会有一些陷井,为什么它会让你程序崩掉,为什么有的程序很流畅,有的程序就卡住了,这个都是multithreading,第三是如何做平滑的滚动,最早大家感觉平滑滚动跟不平滑区别在iPhone客户端软件端,让整个列表是非常舒服是如何做到,这里面有不仅一个技巧,最后会给大家介绍一个叫hockey一个新技术,如果你是做自己的软件,会经常面临一个问题,把你的东西发给你的测试者这个过程是一个很痛苦的过程,因为你要教会他怎么做,每次要更新的时候,会需要插上线,久而久之他们觉得这个测试特别麻烦,其实不用这么麻烦,为那么hockey有一个视频让大家看一下什么方法是最科幻的。
&&& 你会看到很多的你会用到各式各样按纽,虽然你可以获得一些系统级按纽,但是你拿不到所有系统级按纽,比如说地位图片拿不到,很多人仿制在短信里面气泡图片,还有苹果自己的质感但是会花很多力气仿制是没有必要的,所有这些图片,IOS系统运行的时候,所有图片是以一种PNP方式存储系统里面,内存里面有一张表,里面会有一堆地址,指向图片是内存的位置,因此你可以通过一些很底层的方法,实际上可以把IOS整个操作系统里面的所有每一张图片,按纽都可以拿到,你特别想要恢复按纽,想要看到你界面上任何东西,比如说你想看最新的东西,所有人见人爱会文字的小图标非常简单,我把地址已经列出来了。
&&& 只要运行这款软件,可以在桌面上生成一个文件夹,里面把苹果自己所有的每一张图片资源放到这个文件夹里面,如果发现里面有一直放置的东西你不用放置直接用就可以了,并且这种方法不违反苹果的任何规定,用这种方法做很多软件都已经跑在App& Store里面。很多图片是苹果自己的图片,根本不需要自己把做成像苹果的,因此只需要工具把苹果自己的拿出来,用到你的软件里面就好了。
&&& 完整用这样的方式拿出来是有31兆容量,差不多有2000个文件,如果你是一个美工对这个东西会非常好奇。同时还包括所有文字图片,在最新iPhoen4上面运行,可以拿到所有的图片尺寸是64&64,这个做任何东西的时候都非常有用。
&&& 讲到设计,我们刚才讲到把UIKit拿出来,拿出来最大作用可以让你产品看起来跟像苹果的,你有一条路可以走的时候,可以把你自己的设计尽可能像苹果出厂一样,这种方式设计也是历年可以拿到苹果获奖作品的做法,他们为什么能够拿到大奖,他们让自己的作品像苹果总部做的一样,这是一种设计思路,而且是很难的路子,在App& Store上面有很多东西,试图创新,试图引入一些在苹果里面不存在的元素,这个时候可能是为了实现业务逻辑或者功能,我只是请大家稍微思考问题,你就用苹果的东西,就可以做出非常好的产品。现在很多开发者他们会想改成红色或者橙色,你做这个想跟里品牌LOGO契合是你的考虑,你想做一个通用工具,可以试试,怎么让你的张得苹果一样,无论对于你销量还是用户体验都是有非常大的帮助。
&&& 实在有非常强的美工就是觉得苹果东西看得特别烦,怎么办呢?也有成功的例子,可以做一些跟苹果不一样的,如果要做的极致,不是做出一个新的按纽,要做应该是说把它整套的苹果里面有的元素都放到一边,对典型的例子有一家公司他们做了一款转换器软件,还做了计算机,在里面做什么事情,在里面加了一个名字这个叫creative现在还做一个跟T有关的,这个也是非常酷的方式,如果你是面向全世界,哪怕是非常普遍的功能,国外消费者是原以为这种独特的想法买单的,在美国有一家公司,做了几款非常成功应用,其中拍照软件,他们完全做了自己,不仅仅是做了一个按纽,做的是一个完整的UI的,也做了非常简单像单位转换什么的,我看过他们两次公开出去的财务报表,他们做款非常简单单位转换软件,他们收入四万美元,还有一款拍照软件,后来他们卖了三个月是17万美元收入,也就是说好的设计在国外是有消费者愿意买单,是两条路,如果不能把你的软件做得像苹果一样,另外一条路可以完全作为一个自己一套UI出来,不是夹在中间,或者看起来很不上档次,所以以上是我关于设计个人的想法,要么做的话最好做一个极端的,这样消费者会很喜欢.以上是关注设计的话题。
&&& 我们进入到下一个,关于多线程这个东西很多IOS开发者刚进入这个领域的时候,觉得最困难的一个东西,是因为写界面可能很简单,只需要有哪些空间可以用,有哪些摆放方式,但是需要和网络数据打交道必须用到多线程,当你软件到了哪种程度一定要用到多线程,另外一个多少种可以实现的方式,如果只算一些高级方式。据我所知至少有四种,我今天只会介绍其中三种,因为最后一种太新了,我们先解决第一个问题,你会在什么时候想要用,多线程,我说一个例子如果你的软件是关于用户体验的问题,如果需要用户登录,或者需要搜索,但是这个时候会存在一个问题,用户很可能3G或者2G网络使用者款软件,很可能登录请求会失败,也有可能突然搜索一个什么东西突然走进地铁,这个时候就没有信号,你界面交付流程怎么做呢,造成结果是什么,有的程序你会注意到当它切换到一个新的分类里面的时候,或者当你点了某个功能界面就锁住,只能等着要么成功,要么失败,为什么,程序在初始化完毕以后,可能是可以动的,这种时候上面有一些按纽,可能设定了一个方法,当用户单击按纽方法启动,大部分思维就是按一个按纽,然后按纽做一个事,按纽有一个下载,很可能主线程被锁住,主线程需要接收用户输入事件,如果你用一个什么把这个主线程卡住,后果就是比较动了这个界面,必须等着按纽里面方面执行结果出来以后,要么是错误,要么是正确,才会出来,来由另外一个情况就是如何用多线程,如果有一个非常复杂的软件,里面有非常多的层级,假设我们是一个一层一层进去,最里层编辑了一个东西,推到上一层,上一层东西自动就变了,你用什么方法让它变呢。有一种做法一层一层找回去,最后发现上一层执行一个什么样的方法,这种方式不是最好的做法,最好做法是说没有那么复杂的,我们一会儿可以看到最好做法是什么,根本不需要考虑一个对象和另外一个对象中间隔了多少层,我们只要想中间做了什么事就好。
&&& 当所有这些可能需要使用到多线程的时候,都能够很好处理好以后,最后能够带来的结果主要是两方面,第一方面用户觉得这个东西更好用了,不会卡。如果在一个主线程等待一个另一接受一个数据,这个数据出现意料之外的情况,这个时候可能当前正在运行的处理按纽的方法可能没有处理好,很可能程序就死掉了,这种时候App& Store里面一个审核,起码要等7天,如果你的软件这样一个不小心出现问题,这种时候要把一个申请提交上去要等7天,以上是讲了在多线程可能会被用到方面,还有它的意义。
&&& 下面给大家介绍三种常用的线程解决方案,或者在什么时候可能用得到它。有三种方式,第一种系统本身自带一个类叫而系统里面每一个类都NSOperation子类最高级的是nsnotification,如果大家看过苹果视频,或者苹果教程里面有,我今天讲在实际里面是怎么做的,我们看一下实际解决多线程的办法,就是nsthread不需要初始化,你需要一个多线程起来做什么事的时候可以用这个方法,,你让执行某一个类上面的方法,然后这个东西不会给你带来任何的返回值的,但是通常有一种用它办法是什么。前面有缩略图,前面是空的,你再加载,最简单做法就是用nsthread解决。在第一次创建的时候,可能先加入一个用来占位的图片,接着可以在创建方法里面用一个nsthread,换成在网络里面下载的图片,如果图片已经下载,可以从本地里面的读取,这种做法是用nsthread可以非常简单解决,这种方法有它的不好的地方,就是说nsthread这个操作消耗内存和CPU稍微有点多,还有更轻量级做法,你在很快滚动,这个时候突然同时加载7、8张图片,这个时候你会看到7、8个图片在等着网络返回数据,如果你要做一款网络上面读图片或者用户图片最简单做法可以先试试用nsthread。
&&& 第二个东西是在任何一个NsOpiect ,我们知道所有对象都是来自NsOpiect,NsOpiect有的东西包括你自己创建都有,这个方法通常做法,performselector,在你的一个类,当想要更新界面的时候,用这个方法,并且一定要把最后看到有一个参数是waitunt是被苹果官方推荐,理论所有对于主界面上面更新应该是发生在你的应用的这个里面,所有要主界面加一个按纽,把一个什么东西状态设置为无,需要做这样一件事情的时候,你播放动画想把这个系统暂时锁住一下,如果这个时候让它可以动可能会发生一些冲突,为什么有一些主界面会些有一些闪,因为他没有更新主界面,如果你要主界面做任何增加或者删除推荐办法就是用可以保证第一程序不会因为任何冲突而有问题,第二可以保证你的程序决定不会出现闪烁的情况,这两个最基本的做法。
&&& 我们看nsoperationq和nsoperation这两个词很酷,operation定义一个细小任务可能涉及OI可能不涉及,通常做法假设做了一个软件,比如说,天气,汇率,任何启动需要从后台读取数据一种推荐做法会在你的构件的时候会让它有一个NSoperation,启动的时候想象成是一片海洋,或者自己的一片区域,你放一个NSoperation意味着你停了一个航空母舰,会在你整个应用程序周期都可以用,当有了这个Q以后,这种时候可以把一个又一个NSoperation推进去,会用他方式执行,可能会同时执行几个,或者可以按照你给他设定频度做,这种特别适合,如果你的软件每次启动的时候,需要从网络上面度大量数据,你用什么方式管理它呢,最简单方法把你要读各种不同类型数据定义成各种不同的NSoperation,这个类做法是这样不能直接用,所有要用NSoperation,必须集成它,集成它你会做一个自己的方法,像我这个里面大家可以看myoperation是一个nsoperation子类,可以给它传任何你需要参数进去,可是一个用户名,或者一个密码,或者一个地址,可以想象,一款微博客户端,启动的时候用户不需要做什么事,就会帮用户检查一下我有没有新的东西,DM这个时候可以在他的里面有一个NSoperationQ,不同的把operation推进去,可以在后台完成数据下载,里面不出现特别严重错误通常不会导致你的软件有问题。
&&& 但是最好用途是可以用一种比较清楚的方法管理,你的程序在每次启动结束以及需要的时候,或者说另外一款T客户端里面,当你转推别人一条,转发就是NSoperation,你是否确认,你点确认这个时候后台有一个NSoperation被推了进去,我们讲了这么多NSoperation各位会想到一个疑问,我要在NSoperation更新主界面,或者出发我某一个做一个什么样的更改怎么办呢,比如说你在T里面,想要把一条T加为收藏,这个时候点加收藏,这个T旁边多了一个五角星这个是怎么做到就是下一个。
NSNotification它所管理就是一个关系,什么样的关系就是当你的任何对象也好,在初始化的时候,你可以把它给定义为一个对象,在给出的代码里面最下面一段,回到T的例子,怎么让一个NSoperation执行完以后,告诉你我要把我自己变成一个,我对一个或者某一个消息感兴趣,有一个参数名字叫我只对特定消息感兴趣,我收道消息会执行某个方法,在这个执行里面。
&&& 回到刚才的例子,当一个NSoperation结束完以后,会发一个消息出来,用的方式是第一段代码里面,参数是T消息的ID,会把这个消息发送到通知中心,这个时候如果之前我们注册的时候我对这条消息感兴趣,我愿意相应它,它的相应这个方法会得到执行在界面上把这个五角星加上,最好一个优点是只需要关注你的软件要干什么,不用想他们之间复杂关系,因为很多可能很多IOS开发者,之前是从前端开发过来,你用DOM改写页面对象会关心他们之间层级关系,在IOS开发不需要关注这些东西,只需要用这些非常简单的方式实现米想要的目的。这块我知道可能一下子就干讲大家还会有一些不明白,这些东西太简单了,在座各位已经有很多人用过,如果有任何问题欢迎提出来。
&&& 还有第四种用法,但是那种东西很少用到,而且至少我自己还不熟悉,所不我不会在这里讲,接下来在整个过程当中我用非常多的例子说的是T里面各种产品,我们接入到第三个话题,就是大家在第一次用T整个界面特别的平滑,流畅到iPhoen4用户头像变成高清也很流畅,还进行了一些处理,比如说头像是远景同时还可以那么平滑滚动,我做过一些研究,我会把我知道的结论告诉大家,这些方法确实可以做到像T那样平滑的滚动,这个东西意义在于说比如说假设说现在市面上有三款新浪微博客户端,那你优化的时候用户会感到用这个特别舒服,流畅,新浪自己的一款,我觉得你们滚动针的作用是很好的,起码跟T不是一个层级的,如何做到,第一条是一个通用性的规则,就是说当你能够用UIscroiiview解决就不用UITableview,只是想把苹果屏幕滚动两三屏,不超过三屏就用UIscro如果同样事情你uitaple会很复杂,这个里面技巧在于必须对可能会放到数据量有一个大概的估计,如果数据量非常大,里面有一些很复杂绘图还有希望需求还想用uitable如果一个很简单的需要没有必要用uitable如果必须uitable要用,在处于可见状态才可以生成,生成过程要用真正毫秒绝对是否平滑的因素,你需要做变高度的uitable,像新浪微博每个高度是不一样,要根据里面有多少文本算里面要放多少东西,决定这个有多高。常规做法你到那个生成才会算那一行字要占多少,这样做不好,最好做法在你NSoperation最好把这些高度已经算好,如果你支撑横屏,把高度也算好,高度联消息本身会放到一个数据库里面去,这个时候会发送一条NSoperation告诉你的数据已经好了,再读出来,这种时候不需要在每一个单独算要有多高,直接用从数据库里面读出来的值就可以了,各位如果做过ipad上面开发,ipad存在一些问题,如果用这种在每一个生成的时候算高度,你的程序会出问题,不知道为什么,对于消息听列在一个ICU库,算字体宽度高度C++函数里面。实际上那个东西高度应该用一个NSoperation算好放到数据库,前台把你算好直接图出来,每一次生成的时候只需要画图不需要算,流畅度可以提高一个程度。
&&& 把多少可以消耗CPU操作放在生成里面,还有只有一些绘图工具可以直接画上去,第三就是非常具体的问题T头像,其实用的是从OS3开始才有一个非常便利的东西,OS2要用一些合成东西做,OS3,大家可以搜一个关键词CA,每一个UA,实际上里面会有一个内容就是一个CA,你的每一个UI同时CA里面系统里面涂层,涂层有特效这个概念,特效包括我要把一个图片贴上一个远角,阴影角度都是可以调的,生成里面直接放到你的里面你程序基本不能用,直接把带着特效的图片你的程序绝对不可以用,ipad上面特别明显,你任何系统自身动画,包括你要联网都会卡,因为那个东西太厚了,在IOS里面优化程度还没有到那个程度,你又非常想用解决办法就是说还是通过,graphics,可以把它合并涂层,变成在内存里面一个透明的PNG可以把那一堆东西变成一个UI,不管你再复杂特效贴到界面绝对不会卡,因为被后没有那么多运算,顶多带有一个透明度,但是不会影响你界面的卡。
&&& 最后一个技巧随着说可以在界面里面用半透明的东西,但是尤其避免一点如果界面同时有两个半透明的东西在滚动,绝对不要让它们叠在一起,可能会有一个文本标签,和一个头像,他们背景都是透明,或者像新浪微博,会有一个用户头像,头像旁边有一个小小V,但是头像和V是两张透明图片,两个不同对象做法是直接叠在一起,也会卡得非常厉害,更好做法直接把头像用一种合并涂层概念,这个有现成代码。你尽可能多的做这样的合并,甚至可以联你的一起合并整个图片,性能会无比好,会非常流畅。
&&& 最后当出现卡的问题,instruments里面有一个工具可以帮助你找到那种问题,如果你联一台设备,调试它,会看到instruments有一个功能,让你程序里面出现红色透明会标识,当你在滚动界面出现需要算一下会有红色透明标识出来,那个就是造成性能脱慢的一个罪魁祸首。
&&& 最后一块会比较轻松,就是一个叫hockey的一个技术。有人用过吗?有可能联通的用户是不可能逾越,这一批iPhoen2是不可能逾越,hockey有几点优势,第一可以直接你的iPhoen上面安装,不需要插一根线,也是一个开源项目。这台iPhoen不需要逾越就可以使用这个技术,如果你们有需要向海外用户发,可以试试这个方式。以上我今天讲的所有议题。
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 xcode5 的文章

 

随机推荐