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码农(不忽悠)的更多相关文章

  1. BCD码转换为十进制或者十进制转为BCD码

    BCD码其实就是之前在数字电路中说的 用4位二进制数值 来表示一个0-9中的数字,例如: 0000=0 0001=1 0010=2 0011=3也就是说如果把一个数字作为一个BCD码,例如: 11 2 ...

  2. android2.3 View视图框架源码分析之一:android是如何创建一个view的?

    View是所有控件的一个基类,无论是布局(Layout),还是控件(Widget)都是继承自View类.只不过layout是一个特殊的view,它里面创建一个view的数组可以包含其他的view而已. ...

  3. 【如何快速的开发一个完整的iOS直播app】(原理篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的 ...

  4. 如何快速的开发一个完整的iOS直播app(原理篇)

    目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...

  5. android MediaCodec 音频编解码的实现——转码

    原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...

  6. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  7. iOS播放器、Flutter高仿书旗小说、卡片动画、二维码扫码、菜单弹窗效果等源码

    iOS精选源码 全网最详细购物车强势来袭 一款优雅易用的微型菜单弹窗(类似QQ和微信右上角弹窗) swift, UITableView的动态拖动重排CCPCellDragger 高仿书旗小说 Flut ...

  8. Android | 教你如何开发扫二维码功能

    前言   最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳,比如距离稍微远点儿就扫不出来了,另外角度对的不好,反光或者光线比较暗 ...

  9. 【如何快速的开发一个完整的iOS直播app】(美颜篇)

    原文转自:袁峥Seemygo    感谢分享.自我学习 前言 在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,美颜功能是很重 ...

随机推荐

  1. WPF之路一:相对路径图片显示

    由于公司项目的需要,改为WPF开发,因此需要学习WPF,遇到的第一个问题就是在显示的图片的时候,写绝对路径,图片显示没有问题,但是写相对路径的时候,发现图片无法正常显示,在网上搜了一下,得到的答案是需 ...

  2. 老李推荐:第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号 2

    代码先是发送”LIST”命令到ViewServer列出所有的打开的窗口,然后把每个窗口都保存起来.342行起按照源码的注释解析就是说:从协议版本3以后开始加入了窗口自动更新的功能,但是在此之前,如果用 ...

  3. 爬虫入门系列(一):快速理解HTTP协议

    4月份给自己挖一个爬虫系列的坑,主要涉及HTTP 协议.正则表达式.爬虫框架 Scrapy.消息队列.数据库等内容. 爬虫的基本原理是模拟浏览器进行 HTTP 请求,理解 HTTP 协议是写爬虫的必备 ...

  4. Visual Studio 2017无法加载Visual Studio 2015创建的SharePoint解决方案

    前几天安装了最新的Visual Studio 2017企业版,发现无法打开之前使用Visual Studio 2015创建的SharePoint 2016解决方案,提示"需要更新" ...

  5. IE6-7下margin-bottom不兼容解决方法(非原创,视频中看到的)

    在IE低版本下有很多不兼容,现在将看到的   IE6-7下margin-bottom不兼容解决方法   演示一下,方便日后自己查阅. <!DOCTYPE html> <html la ...

  6. Virtualbox 复制 CentOS 虚拟机无法联网

    Centos刚装好后无法联网 复制虚拟机后,出现 No such device eth0 我们要处理的三个问题: 在Virtualbox上安装好Centos后如何联网 如何在Virtualbox上复制 ...

  7. loopj.com android-async-http

    loopj.com android-async-http Android异步Http客户端 用于Android的基于回调的Http客户端库   下载版本1.4.9(最新) 或者在github上fork ...

  8. 将Excle中的数据批量导入数据库

    namespace 将Excle中的数据批量导入数据库{    class Program    {        static void Main(string[] args)        { S ...

  9. 【从无到有】HTML的初识——part1

    Ⅰ.HTML的初识 1.HTML:超文本标签语言(网页源代码) 2.html的基本结构: <html> <head> <meta charset="utf-8& ...

  10. HashMap 学习笔记

    先摆上JDK1.8中HashMap的类注释:我翻译了一下 /** * Hash table based implementation of the <tt>Map</tt> i ...