201808-28 iOS 利用AFNetworking实现大文件分片上传 概述一说到文件上传,想必大家都并不陌生,更何况是利用AFNetworking(PS:后期统称AF)来做,那更是小菜一碟。比如开发中常见的场景:头像上传,九宫格图片上传...等等,这些场景无一不使用到文件上传的功能。如果利用AF来实现,无非就是客户端调用AF提供的文件上传接口即可,API如下所示:-(nullableNSURLSessionDataTask*)POST:(NSString*)URLStringparameters:(nullableid)para... 继续阅读 >
201807-22 iOS-性能优化深入探究 上图是几种时间复杂度的关系,性能优化一定程度上是为了降低程序执行效率减低时间复杂度。如下是几种时间复杂度的实例:O(1)returnarray[index]==value;O(n)for(inti=0,i<n,i++){if(array[i]==value)returnYES;}O(n2)///找数组中重复的值for(inti=0,i<n,i++){for(intj=0,j<n,j++){if(i!=j&&array[i]==array[j]){... 继续阅读 >
201807-11 iOS内存管理:从MRC到ARC实践 对于iOS程序员来说,内存管理是入门的必修课。引用计数、自动释放等概念,都是与C语言完全不同的。搞明白这些,代码才有可能不crash。然而就是这么牛逼的内存管理,着实让我这个从C转过来的老程序员头疼了一段时间。[C++程序员的迷惑和愤怒]iOS内存管理的核心是引用计数。与众多五年甚至更多以上开发经验的程序员一样,笔者当初是从C/C++转到的OC,接触到MRC。当时遇到最头疼的问题就是:为什么那么多releas... 继续阅读 >
201806-20 YYModel 源码剖析:关注性能 前言json与模型的转换框架很多,YYModel一出,性能吊打同类组件,终于找了些时间观摩了一番,确实收益颇多,写下此文作为分享。由于该框架代码比较多,考虑到突出重点,压缩篇幅,不会有太多笔墨在基础知识上,很多展示源码部分会做删减,重点是在理解作者思维。读者需要具备一定的runtime知识,若想阅读起来轻松一些,最好自己打开源码做参照。一、框架的核心思路使用过框架的朋友应该很熟悉如下的这些方法... 继续阅读 >
201711-30 iOS面试题:阿里-P6一面-参考思路 阿里-p6-一面 1.介绍下内存的几大区域?2.你是如何组件化解耦的?3.runtime如何通过selector找到对应的IMP地址4.runloop内部实现逻辑?5.你理解的多线程?6.GCD执行原理?7.怎么防止别人反编译你的app?8.YYAsyncLayer如何异步绘制?9.优化你是从哪几方面着手?1.介绍下内存的几大区域?1.栈区(stack)由编译器自动分配并释放,存放函数... 继续阅读 >
201711-08 iOS中的MVP模式初探 以前在项目中都写的是MVC模式,由于现在在项目中要学习MVP模式,所以找了一个Demo研究了一下.就简单说说自己的看法吧.先说一下MVC模式,示意图如下:MVC模式示意图模型拿到数据,可能是数据库或者网络数据最简单的比方,我们拿到一个模型数组了之后,这个就相当于是一个数据源.将数据传递给控制器,控制器经过简单地加工数据源经过简单地处理加工,比如在tableView中,我们... 继续阅读 >
201710-25 最近很火的 Safe Area 到底是什么 iOS7之后苹果给UIViewController引入了topLayoutGuide和bottomLayoutGuide两个属性来描述不希望被透明的状态栏或者导航栏遮挡的最高位置(statusbar,navigationbar,toolbar,tabbar等)。这个属性的值是一个length属性(topLayoutGuide.length)。这个值可能由当前的ViewController或者NavigationController或者TabbarController决定。一个独立的ViewController,不包含于任何其他的ViewControll... 继续阅读 >
201710-13 iOS蓝牙开发CoreBluetooth框架总结 最近兼职公司一个项目设计蓝牙项目,在开发过程中踩了不少坑,做了一些简单的整理以及总结,在此顺便分享一下。概念iOS开发中,谈到蓝牙现在基本最常使用的框架就是CoreBluetooth框架了,使用该框架可以iOS设备与蓝牙设备或者iOS设备与其他非蓝牙设备的交互。蓝牙开发分为两种:中心者模式和管理者模式中心者模式我们的手机作为中心设备,连接蓝牙设备(这也是最常用的一种模式,比如使用我们的手机连接... 继续阅读 >
201709-26 2017年排名前11的iOS应用分析工具 似乎每年都有越来越多的移动分析工具,2017年也是如此,所以用户很难在这么多iOS应用程序选择使用哪一个,或者说,用户将不止使用一个分析工具。开发人员倾向于使用各种分析工具来帮助他们全面了解iOS应用程序,每一个工具都可以为你提供一个独特的应用程序视图,以及它的执行情况。我们对iOS开发者在2017年使用的iOS应用分析工具进行了广泛的研究,发现这11个是最好的。Firebase(谷歌应用分析工具)“Appsuccessm... 继续阅读 >
201709-25 App开发团队必须知道的 iOS 11 更新点 WWDC2017已经过去差不多一个季度了,最近随着Xcode9正式版以及iPhone8、iPhoneX的发布,iOS11的全面适配也被提上了日程。我整理了一下更新点,包括开发、设计、产品甚至是市场都应该注意的点,分享出来希望对大家有所帮助。新增框架ARKitiOS11引入了新的ARKit框架,让您轻松创建无可比拟的iPhone和iPad增强现实体验。通过将数字对象和信息与您周围的环境相融合,ARKit为App解开了屏幕之缚,... 继续阅读 >
201709-21 iOS开发:为你的应用兼容iPhone X 每年苹果爸爸都会在六月份的WWDC上发布有关下一代iOS的新特性和改动内容,开发者们有半年时间去准备和兼容最新版本的iPhone和操作系统。但是这一次为了在发布会前不泄露iPhoneX的相关信息(实际上我们早就知道了=。=),苹果直到前几天才在官网上线了兼容全面屏的指导文档和视频。离iPhoneX正式上市还有两个月不到的时间,我们需要为我们的app做哪些准备呢?屏幕我们在编码中使用的是以point为单位的屏幕尺寸(... 继续阅读 >
201709-01 『libextobjc』Objctive-C 协议的默认实现 继续阅读libextobjc的源码,看到一个非常有趣的实现——Objective-C的protocol默认实现。当然,这不比Swift的extension默认实现,Objective-C在这方面没有Swift强大,并不能完全的实现POP,但是这不妨给我们提供一种思路。首先,列举一下当面对这个问题时,都有哪些疑问:会用到方法注入,但是什么时候注入?以什么形式获取默认实现的SEL与IMP?怎样减少性能开销?然后,我们... 继续阅读 >
201708-09 iOS中实现一个支持小数的星星评分组件 在很多电商,外卖,餐饮型应用里,都会在商品结束后评价中有一个星星组件。核心思路就是用UIControl并自定义实现其中的trackTouch的几个方法。而显示不到一个的星星,比如半个星星的思路是根据分数切割星星的图像并显示其中一部分。实现后效果如下。单个星星的实现对于单个星星的实现,先考虑星星有三个状态,完全置灰状态,完全高亮状态,根据百分比半高亮状态。而我这边用的是UIButton来实现,因为UIButton本身已... 继续阅读 >
201707-24 那些设计iOS API需要知道的事 为了能够将我们项目中的代码能够在后续开发者使用(重用代码),通常使用的方法是将代码按照功能模块编写成API。那么我们就很有必要了解Objective-C语言中常见的编程范式(paradigm),同时还需了解各种可能碰到的陷阱。命名命名冲突的问题Objective-C没有其他语言的那种内置命名空间(namespace)机制。因此,我们只能自己想办法来解决命名冲突问题。最常用的解决方式就是,仿照其他语言(C++)建立自己的namespac... 继续阅读 >
201707-10 八年iOS老开发的五点心得 本文作者从2009年开始进行iOS系统的开发工作,中间参与开发了无数款应用。本文就是结合他多年心得,总结出的一些能够让应用开发更高效、更有趣且更具可维护性的方法。1、保持源生如果代码保持源生平台,就不会真正出错。任何跨平台的技术都可能会增加复杂性,并有可能给项目引入bug。此外,报告的实际节省时间差异也很大。目前,我们只听说过有大型项目因跨平台而感到后悔,而未曾听说过大型项目因保持源生而感到后悔的... 继续阅读 >
201707-06 从iOS的图片圆角想到渲染 圆角是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受。设置圆角会带来一定的性能损耗,如何提高性能是一个需要重点讨论的话题。大家常见的圆角代码x.layer.cornerRadius=xx;x.clipsToBounds=YES;这两行确实实现了圆角视觉效果。其实使用x.layer.cornerRadius=xx;已经实现了圆角,只不过在某些控件是不生效的,因为某些图层在被切割圆角图层之上而被显示出来了。而x.clipsToBounds=YES;带来的... 继续阅读 >