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,美颜功能是很重 ...
随机推荐
- [SinGuLaRiTy] 2017-03-30 综合性测试
[SinGuLaRiTy-1014] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有的题目:Time Limit:1s | Me ...
- Excel公式-求最低价网站名字
p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...
- 记录一次raid数据恢复及回迁成功的案例
故障发生在两块盘组成的一个raid0上,其中的一块盘亮黄灯,被raid卡踢出后,raid崩溃,下面就把当时抢救数据的整个过程进行介绍. 由于硬盘是两块SAS 300G的硬盘,先把硬盘从机器中拔出来,然 ...
- android中的 Toast 和 AlertDialog
Toast 一般用来显示一些不需要用户操作的提示信息,举个栗子: public void toast(String msg) { //---创建并设置显示的内容和显示时长 Toast toast = ...
- Android Studio 安装后首次启动的 Config path ...... is invalid 问题(转)
原文链接:http://m.blog.csdn.net/blog/hnust_xiehonghao/46127775 1. 问题描述: 安装好Android Studio后,启动时弹出如下信息: Co ...
- Maven基础学习(一)—Maven入门
一.概述 Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 ...
- mysql 4 索引的优缺点
为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能. 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因. 第 ...
- 免费视频播放器videojs中文教程
Video.js是一款web视频播放器,支持html5和flash两种播放方式.更多关于video.js的介绍,可以访问官方网站介绍,我之前也写过一篇关于video.js的使用心得,有兴趣的可以点这里 ...
- Java线程池(ThreadPool)详解
线程五个状态(生命周期): 线程运行时间 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间. 如果:T1 + T3 远大于 T2,则可以 ...
- 《阿里巴巴Java开发手册(正式版》读记
前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方 ...