Android码农如何一个星期转为iOS码农(不忽悠)
WeTest 导读
作为一个android客户端开发,如果你不懂点ios开发,怎么好意思说自己是客户端开发呢,本文讲解如何让android开发码农在一个星期上手IOS开发 --《记录自己IOS开发经历》。
一、开发工具对比
AndroidStudio作为android开发的御用编辑器,相信小伙伴不用我解释太多,其中有太多好用到哭的功能不想过多解释,相比之下,XCODE作为IOS开发的御用编辑器,大部分功能就比android studio要落后很多,我接触过一段时间,有以下几点感悟:
1、Version 8.2.1之后,直接导致之前的很多插件都没法使用了。
2、swift代码重构等功能迟迟没有提供,相信这对于所有小伙伴来说,至少是1万点伤害。
3、查找功能差Android一条街,double shift查找各种,而XCODE需要点击到左下角,在选类型,在查找。
4、调试功能相对于AndroidStudio来说,有点类似于我国和美帝的差距
5、自动补全,代码着色,注释功能经常间歇性抽风,不知何故,严重需要重启MAC才恢复,(注意,不是重启XCODE),比如下面注释不能使用的场景
6、等等,不想说太多。。
但是,你必须得接受一个事实XCODE毕竟是IOS开发的御用IDE,不用也不行啊,那么,有没有什么办法,使我们在开发ios app的时候,稍微爽点,答案,当然是有的,比如,我是这么解决的。
更加不忍直视的是,直接可以看部分代码片段,恐怕xcode是不会出这么人性化的功能了。
呵呵,聪明的你已经明白了,同时开一个APPCode 来作为辅助,是一种不错的选择,而且这对于曾经是android开发的你来说,绝对是一种增强型体验,快捷键就使用你之前的即可,查找,rename,等等功能爽的不要不要的。
二、干货来了,如何入手
反正以上槽也吐了,那么,接下来总要说点好的吧。
1、感谢苹果推出swift这种语言,使得android码农可以非常迅速的搞起IOS开发,如今SWIFT已经3.1了,如果,你们打算从新撸一款APP,如果还是说,用OC,我建议你治疗一下,swift已经很成熟了,不存在升级一个版本,面临大量代码改写的悲剧了,而且,git上swift的开源库,也是慢慢的够用了,退一万步讲,即便没有,引入OC的库,也是能够用的。那么,如果你打算搞起swift,我肯定是要推荐一些库给你的:以下内容纯属干货:
2、以上说了语言上的选择,swift没错,那么,接下来你肯定是要熟悉swift语法的,我建议你看看
这边书,如果你不太喜欢阅读英文,没有关系,社区已经有人翻译了中文版本的,地址在这里;英文原本直接在官网下载即可。
我想,你一定会说,究竟怎么一个星期就可以搞起?
a、swift语法的熟悉,你可能要注意一下let,optional,guard,switch,tuple之类的,其他的,可以在一遍撸一遍学了,反正用几次就熟悉了,可能语法我只能给你2天时间,不能再多了,ps(学习语法的时候,最好是拿你比较熟悉的语言去对比,个人觉得这种方式是最快的)
b、其实IOS开发的重点并不在语法,而在于苹果为IOS开发者提供的一些UI层面的库的熟悉,这个我只能给你4天时间,不能再多了,这部分的学习相对来说是比较痛苦的,不过,方法依然是对比学习,对照着android 的四大组件,相信你很快就可以从UIKIT中找到他们的影子,举一个最基本的例子。
相信你看到这幅图之后,脑海里面一定是出现了:
没错,就是这样来的,其他的uitextview ,uitableview,uilabel,uiimageview不能说再多了,都是这个套路。
c、推荐工具机器书籍:
dash是一定需要装的,这个查找资料实在不能方便太多,至于书籍,个人觉得没有必要推荐,如果实在要推荐,那肯定是苹果的开发者帮助文档了,直接下载在dash里面看就好了。
至于工具,stackover ,和 google 才是你最需要的,我在爬坑的过程中,遇到的99%的问题都是在stackover上找到了解决方案,还有1%的是至今也没有解决的,问同事,同事也是无解。。
d、swift的亮点有哪些?面向协议vs面向对象
没错,swfit是面向协议的编程语言,加上逆天的协议扩展,各种语法糖只有你想不到,想到了都惊呼,居然可以这么玩。
协议是可以有默认实现的,请在撸的过程中慢慢体会这个的好处,至少,可以为你省去不少的无用代码《空实现》,当然,有人可能会说,这是你定的协议违背的单一职责原则吧,好吧。。
函数式,真的假的,还函数式?
是真的,千真万确,swift是可以玩函数式的。
这不,有人出了一本书,而且,喵神还帮忙翻译不是。
三、俗话说,会列表懂详情,你就是一个“合格”的客户端开发
那么,问题来了,IOS中,如何去做一个列表:实际上,接触过之后,你会发现套路很简单:
a、使用到的组件当然是UITableView,那么,和RecyclerView对比,有什么区别呢?
b、RecyclerView中的列表项的数据是有adapter的onCreateViewHolder和onBindViewHolder合力完成,onCreateViewHolder负责layout出cell的架子,onBindViewHolder负责给架子填充实际的数据,那么IOS中是如何做的呢?
同理,
UITableView的这些个方法可以给你创建cell的架子,然后数据的绑定就由DataSource的
这个方法提供。那么问题来了,UITableViewDelegate是干嘛的呢,相信你见过ios对于列表项的左滑出现删除,乃至,长按拖动列表项的位置,其实都是由这个代理提供对应的接口去实现。
c、因此,细心的你会发现,两个平台的在列表上的实现基本上原理是一致的,不同的是采用的设计模式不同,android显然是使用的适配器模式,一股脑的所有的动作都在adapter中做好就可以了,两者也均有CELL重用机制,也都会遇到列表常见的性能问题,这些也需要在开发的过程中细心的去体会。
d、详情不必多说,只要你了解了UIViewController的生命周期,以及navigationController对于Controllers的管理栈,一切都是和android惊人的类似,但是似乎IOS又简单了不少,至少在生命周期函数上,IOS没有什么onstop,(onresume可以找到对应的viewWillAppear)等等,fragment的概念似乎在IOS中不存在,不过可以类比为一个UIVIEW吧(本人暂时这么理解)。
四、其实,IOS开发也是有很多坑在等待着你,不过别急,你踩过的,99%都可以在stackover和google上找到
a、比如,IOS开发中,代理的使用是非常常见的,但是稍稍不注意,就会造成循环引用,什么是循环引用,看图
uiview作为子view加入到ViewController中,出于某种原因,uiview需要持有ViewController的引用,比如可能某些事件需要通过代理传递进去,因此,循环引用稍稍不注意就悄然发生了,那么,怎么解决
使用weak:
weak may only be applied to class-bound protocol types是个什么鬼,在java中,就是这么搞的啊,stackover一下咯,这里发现了答案
b、连续pushViewController,先pushA,在A的viewDidLoad中马上pushB,结果B没有出现,我的想法是让A作为一个过渡的页面,(因为经常有这种需求,主人态客人态的页面结构差异很大,因此我习惯做两个页面。然后通过一个导航页来跳转)。
那么原因是什么,这次,我没有搜索到答案,可能是我输入的关键字不准,对于问题的描述不够准确吧,但是我还是解决了,我猜想可能是因为,两次,push的时间间隔不能太短,于是我这么做了
使用timer做一定的延时,结果,果然就解决了。所以有时候猜一猜,别怕,大胆尝试,也许问题也能解决。
c、总结一下,在有android开发基础上做到ios开发入门是比较简单的,但是,要做到ios开发上游刃有余,还是需要一定的时间的,那么,如何加速这个过程,只有让自己不断的痛苦,比如,去github上学习开源的项目,在比如,直接熟悉你们现有的项目的ios版本。
【腾讯WeTest iOS预审工具】
为了提高IEG苹果审核通过率,腾讯专门成立了苹果审核测试团队,打造出iOS预审工具这款产品。经过1年半的内部运营,腾讯内部应用的iOS审核通过率从平均35%提升到90%+。
现将腾讯内部产品的过审经验,以线上工具的形式共享给各位。
在WeTest腾讯质量开放平台上可以在线使用。点击http://wetest.qq.com/product/ios即可立即体验!
如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:800024531
iOS预审工具分四步进行预审服务
【一键扫描】只需提供ipa包、审核图片、审核视频、应用描述,即可在4小时内拿到一份完整的检测报告,定位问题的同时提供解决方案,助您成功通过审核。
【案例分享】集结iOS审核失败常见原因,丰富案例为您提供参考依据。
【专家服务】腾讯专家团队为您分析各种疑难杂症,提出最优解决方案。
【ASO优化】专业优化AppStore内关键字搜索结果,让产品离用户更近一步。希望App/手游在预审验收保证下,都可以快快乐乐过审,开开心心赚钱。,开开心心赚钱。
Android码农如何一个星期转为iOS码农(不忽悠)的更多相关文章
- BCD码转换为十进制或者十进制转为BCD码
BCD码其实就是之前在数字电路中说的 用4位二进制数值 来表示一个0-9中的数字,例如: 0000=0 0001=1 0010=2 0011=3也就是说如果把一个数字作为一个BCD码,例如: 11 2 ...
- android2.3 View视图框架源码分析之一:android是如何创建一个view的?
View是所有控件的一个基类,无论是布局(Layout),还是控件(Widget)都是继承自View类.只不过layout是一个特殊的view,它里面创建一个view的数组可以包含其他的view而已. ...
- 【如何快速的开发一个完整的iOS直播app】(原理篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...
- 如何快速的开发一个完整的iOS直播app(原理篇)
目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...
- android MediaCodec 音频编解码的实现——转码
原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- iOS播放器、Flutter高仿书旗小说、卡片动画、二维码扫码、菜单弹窗效果等源码
iOS精选源码 全网最详细购物车强势来袭 一款优雅易用的微型菜单弹窗(类似QQ和微信右上角弹窗) swift, UITableView的动态拖动重排CCPCellDragger 高仿书旗小说 Flut ...
- Android | 教你如何开发扫二维码功能
前言 最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...
- 【如何快速的开发一个完整的iOS直播app】(美颜篇)
原文转自:袁峥Seemygo 感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...
随机推荐
- Unix环境编程基础下
Unix出错处理 当UNIX系统的函数出错时,通常会返回一个负值.我们判断函数的返回值小于0表示出错了,注意我们并不知道为什么出错.例如我们open一个文件,返回值-1表示打开失败,但是为什么打开失败 ...
- 老李分享:loadrunner的java user脚本开发
老李分享:loadrunner的java user脚本开发 poptest在性能测试loadrunner的课程里,以web协议为主,同时也讲解其他协议的脚本开发,对于一个性能测试工程师需要掌握一个以上 ...
- 整合第二次(SSM第一次)------------>spring+struts2+mybatis
今天我们来讲解一下SSM整合,感觉整合这个比上一篇整合更费时,原因在于自己不太熟悉MyBatis了,下午的时候恶补了一下,看了一下相关的文档和PDF电子书,知识真的是你不用就会忘记的,以后还是不能懈怠 ...
- (iOS)关于@property和@synthesize的理解(原创)
开始学习ios的时候,就对一些objc的语法不理解,就比如@property和@synthesize,之前都是记住然后照着用,但是写的代码多了,对objc和ios有了一些理解,再加上最近用MRC,所以 ...
- [个人小工具]清除SVN控制
SVN控制说白了就是在.svn文件夹内把项目文件的信息保存,清除SVN控制其实就是把.svn文件夹删除就可以了.但是如果文件夹太多,总不可能一个个文件夹去删除吧,所以写了个遍历文件夹删除的小工具. R ...
- JavaScript基础学习(二)—JavaScript基本概念
一.语法 1.区分大小写 JavaScript是一种弱类型的脚本语言.它区分大小写,变量名test与Test表示两个完全不同的变量. 2.标识符 所谓标识符就是变量.函数.属性的 ...
- JDBC基础学习(五)—批处理插入数据
一.批处理介绍 当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC的批量处理语句包括下 ...
- centos7安装nagios步骤
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- Linux SvN操作
Linux svn管理工具的12个命令实践 2010-08-25 10:50 佚名 icycling.cublog.cn 字号:T | T 目前,绝大多数开源软件都使用svn作为代码版本管理软件.本文 ...
- swust oj(0088)表达式的转换
表达式的转换(0088) Time limit(ms): 5000 Memory limit(kb): 65535 Submission: 435 Accepted: 93 Accepted 16级卓 ...