发布者认证信息(营业执照和身份证)未完善,请登录后完善信息登录
终于懂得TUP第五期:资深iOS开发者刘昕演讲实录
终于懂得TUP第五期:资深iOS开发者刘昕演讲实录

终于懂得TUP第五期:资深iOS开发者刘昕演讲实录

作者:yhttedit   2021-12-07 06:12:02  点击:7

详情

9月18日下午,CSDN TUP第五期移动开发沙龙在北京举行,沙龙邀请了三位来自国内一线的知名移动开发团队分享他们在创业和开发中的实战经验。

刘昕是中国最早的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里面第一个人工智能五子棋游戏,大家看到这个图已经是版本是一款售价软件售价是,目前有四千次下载,这个是我们在今年完成一个很有趣的新作,今年推出的一个多人SPS游戏战地2,通过我们这个可以看到游戏里面各种数据,我们最近一个新功能,任何多人游戏里面会有一个升级概念,我们这个可以可以给用户看到一条最短升级路线,可以更快升级可以在更快在游戏里面解开武器拿到新能力,这个是PS3恩,跨平台大作,60美元,在全世界有600万正版玩家,我们经过差不多四个月时间,负载到千份之一,同样是收费应用有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不需要逾越就可以使用这个技术,如果你们有需要向海外用户发,可以试试这个方式。以上我今天讲的所有议题。

相关分类
请在电脑上注册登陆 网址:https://www.zxb2b.com/