iOS开发技术分享
文章平均质量分 72
我会与大家在专栏中分享我在iOS项目开发中遇到的难题、解决方案和前沿技术。以及我会开源一些代码和项目。希望能和大家在交流中共同进步。
乞力马扎罗的雪CYF
一只不孤独的猿。
展开
-
AFNetworking访问https出现"NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806"
在之前一篇博客中《AFNetworking访问https出现"NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813"》,而在这篇博客中的这个bug也是非常的类似。出现的场景也是服务端使用了自签名的证书,然后客户端按照《AFNetworking访问https出现"NSURLSession/NSURL原创 2017-03-05 23:55:22 · 6848 阅读 · 0 评论 -
iOS开发——MD5的最佳实践
在iOS开发中,经常会使用到MD5或者其他的一些散列,来提高应用的安全性。最常用的操作就是把密码进行MD5,然后再进行传输。当然现在有很多现成的实现方式,该篇博客就来实现最简单也最常用的封装MD5的方法,使调用起来非常方便。(1)实现一个Category叫Crypto,继承自NSString。因为我们都是把NSString进行MD5,所以写成Category调用会很方便:在NSString+Cry原创 2017-03-05 17:01:04 · 3491 阅读 · 0 评论 -
AFNetworking访问https出现"NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813"
使用AFNetworking来访问http请求非常方便快捷,最简单的请求代码如下:#import "HSTestHTTPSViewController.h"#import @interface HSTestHTTPSViewController ()@end@implementation HSTestHTTPSViewController- (void)viewDidLoad {原创 2017-03-04 22:01:42 · 7565 阅读 · 0 评论 -
iOS运行时Runtime浅析
运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行。例如[target doSomething];会被转化成objc)msgSend(target,@selector(doSomething))来执行。这篇博客会较为全面的来讲解下Runtime。(1)当我们需要使用Runtime的接口时,需要导入头文件:#import ,Runtime可以进行如下操作,在运行原创 2016-07-17 21:43:47 · 11657 阅读 · 1 评论 -
iOS开发——响应链(Responder Chain)的深入理解和代码示例(二)
响应链机制是开发中很重要的概念,在一些事件的处理中需要对响应链的传递有深入的了解,我们才能对事件的传递有更好的控制。今天我们继续来研究下响应链,并实现一个很简单的功能。示例代码已经上传至 https://github.com/chenyufeng1991/HitTest ,可以进行下载调试。要实现的一个很简单的功能就是:透过顶部视图,让底部视图来响应点击事件,这也会响应链使用中非常重要的应用。下面原创 2016-07-10 17:31:21 · 6754 阅读 · 0 评论 -
iOS开发——UIImageView的contentMode、裁剪和layer属性详解
在我们iOS开发过程中,UIImageView是一个非常常见的控件,但是我们未必会用的很溜,因为里面的有些属性不曾注意,或者很难理解。所以会对我们使用该控件带来麻烦,在布局UI过程中可能会造成意想不到的结果。这篇博客主要来讲解UIImageView中的contentMode属性以及和图片裁剪的关系,并且不得不提到就是所有UIView的重要属性:layer(CALayer)。文中提到的所有·示例代码原创 2016-07-03 13:14:09 · 14402 阅读 · 0 评论 -
iOS多线程开发——GCD的使用与多线程开发浅析(二)
对于iOS多线程开发,我们时刻处于学习之中,在看书中,看文档中,项目开发中,都可以去提高自己。最近刚看完了《Objective-C高级编程 iOS与OS X多线程和内存管理》这本书后,对多线程有了更为深入的理解,故在此做一个总结与记录。这本书我已经上传至网盘 https://pan.baidu.com/s/1c2fX3EC ,这本书是iOS开发者必读的书之一,写得很不错,欢迎大家下载阅读。书的封原创 2016-07-02 13:50:17 · 10222 阅读 · 1 评论 -
WWDC Session视频没有字幕解决办法
2016年的苹果全球开发者大会已经落下帷幕,个人还是强烈建议每个iOS开发者都去看一下大会视频。但是对于我们开发来说,真正的重头戏并不是开始的第一场大会演讲,而是后续的大量session,这才是我们需要去每一集慢慢看的。Session中会比较详细的介绍各个平台的新特性,语言的新特性,以及各种新功能等等。官方视频地址:https://developer.apple.com/videos/wwdc20原创 2016-06-28 22:48:50 · 9707 阅读 · 0 评论 -
iOS开发——深拷贝与浅拷贝详解
深拷贝和浅拷贝这个问题在面试中常常被问到,而在实际开发中,只要稍有不慎,就会在这里出现问题。尤其对于初学者来说,我们有必要来好好研究下这个概念。我会以实际代码来演示,相关示例代码上传至 这里 。 首先通过一句话来解释:深拷贝就是内容拷贝,浅拷贝就是指针拷贝。 深拷贝就是拷贝出和原来仅仅是值一样,但是内存地址完全不一样的新的对象,创建后和原对象没有任何关系。浅拷贝就是拷贝指向原原创 2016-06-28 01:41:07 · 12269 阅读 · 4 评论 -
iOS开发——frame和bounds详解
在iOS的UI开发中,frame和bounds是两个非常容易搞混的概念,而很多开发者在实际项目中也很少去区分,因此会导致出现一些意想不到的问题。本篇博客以实际代码的方式来学习frame和bounds的使用。相关示例代码上传至 https://github.com/chenyufeng1991/FrameAndBounds ,欢迎大家下载查看。(1)先来查看一个界面中的容器self.view的fra原创 2016-06-26 23:00:56 · 8072 阅读 · 1 评论 -
iOS开发实战——摄像头与相册权限获取逻辑优化
在实际项目中,我们经常需要访问设备的摄像头或者相册,当第一次安装某个App的时候,系统便会弹出授权对话框,要求用户做出是否授权的判断。整体逻辑比较简单,但是在使用过程中需要对用户体验进行优化,否则会出现bug。该博客的示例代码已经上传至 https://github.com/chenyufeng1991/AuthorityOfCameraAndPhoto 。 首先我先描述一下出现的问题原创 2016-06-22 02:01:55 · 12800 阅读 · 2 评论 -
iOS开发实战——CollectionView中cell的间距设置
我在前面多篇博客中详细讲解了CollectionView的使用与自定义CollectionViewCell的设计,可以参考《iOS开发实战——CollectionView点击事件与键盘隐藏结合案例》《iOS高级开发——CollectionView修改cell的文本及模型重构》这几篇博客。但是今天还是需要来讲讲CollectionView实现中的一个小小的坑,这是我最近在网上浏览时发现很多开发者经常原创 2016-06-21 01:06:59 · 24451 阅读 · 0 评论 -
iOS开发实战——CollectionView点击事件与键盘隐藏结合案例(二)
我在前一篇博客中《iOS开发实战——CollectionView点击事件与键盘隐藏结合案例》详细实现了CollectionView与键盘组合操作中出现的多种情况,并解决了交互体验上的一些问题。在实际项目中也的确可以采用这种方法来操作。但是问题来了,原来的界面我们是使用UIView来操作的,也就是界面是不可滚动的。然而更为常见的场景是一个ScrollView,界面可以进行上下滚动。所以,这篇博客主要原创 2016-06-06 00:56:09 · 9193 阅读 · 0 评论 -
iOS开发实战——CollectionView点击事件与键盘隐藏结合案例
在我们的实际开发中,CollectionView是一种非常实用而又稍难的控件,如果想要在复杂的场景下使用,则需要考虑的比较全面。如果又在CollectionView添加其他的控件,比如在cell里面再添加一个按钮,那么点击触发的事件前后顺序就非常重要了。再者,如果一个界面中包含了一个输入控件,需要弹出键盘时,键盘遮挡对于界面上的其他控件的使用就会造成较大的影响。今天我的案例具体需求描述下:界面中有原创 2016-06-05 13:06:16 · 7165 阅读 · 2 评论 -
iOS开发中的UDID和UUID详解
今天突然想和大家聊聊UDID和UUID的问题,虽然平时我们对这两个东西很忽视,往往也很难区分这两个东西。今天就来好好谈谈。【UDID】 UDID的全名为 Unique Device Identifier :设备唯一标识符。从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址。我在上一篇博客中《iOS应用发布流程详解》提到了真机调试,然后需要把U原创 2016-05-29 15:28:39 · 32332 阅读 · 6 评论 -
iOS应用发布流程详解
这篇博客将会以一个完整的过程来实现一个iOS App提交审核的过程。在这个过程中,我们会涉及到证书、代码签名、授权文件、真机调试、开发者账号等一些概念,我也会有所解释。推荐大家先去看《iOS应用分发与内测(一)》《iOS应用分发与内测(二)》《iOS开发Provionsioning Profile解析》这几篇博客,看完以后会对发布App的流程非常熟悉。我先对一些概念做一个讲解:【证书 Certif原创 2016-05-28 17:05:15 · 12591 阅读 · 0 评论 -
响应式编程框架ReactiveCocoa学习——框架概览
这篇博客将会继续翻译RAC的官方文档Framework Overview. 主要是对RAC这和框架进行概览的介绍和学习。同时也可以参考我前面的两篇翻译《响应式编程框架ReactiveCocoa学习——基本操作符》《响应式编程框架ReactiveCocoa介绍与入门》。其中ReactiveCocoa的Github官方地址为 https://github.com/ReactiveCocoa/React原创 2016-05-22 23:14:35 · 8866 阅读 · 0 评论 -
响应式编程框架ReactiveCocoa学习——基本操作符
我在上一篇博客中《响应式编程框架ReactiveCocoa介绍与入门》简单介绍了ReactiveCocoa的介绍和简单使用,主要是翻译了官方文档中的README部分,其实个人认为技术最好的学习方式就是去看官方文档。今天我仍旧来翻译官方文档中的BasicOperators部分,也就是基本操作符。我写的一部分代码示例上传至 https://github.com/chenyufeng1991/React原创 2016-05-22 13:37:55 · 7613 阅读 · 0 评论 -
响应式编程框架ReactiveCocoa介绍与入门
ReactiveCocoa是Github团队开发的第三方函数式响应式编程框架,在目前市面上的很多iOS App都大量使用了这个框架。以下我简称这个框架为RAC.我下面会通过几篇博客来和大家一起学习这个强大的框架。该博客的案例代码已经上传至 https://github.com/chenyufeng1991/ReactiveCocoaDemo 。当然最好的学习方式是去阅读RAC的源码,Github原创 2016-05-22 01:07:27 · 11592 阅读 · 2 评论 -
Autolayout第三方库Masonry的入门与实践
在如今的iOS开发中,Autolayout已经是不得不使用了,而且是我们主动的去拥抱Autolayout。使用Autolayout最普遍的方式就是在xib或者storyboard中可视化的添加各种约束,这也是Autolayout入门需要掌握的,关于这部分内容,可以参考《iOS开发——Autolayout的实践与技巧》这篇博客。对于比较简单的App开发,可能使用可视化Autolayout也就足够了。原创 2016-05-18 00:51:19 · 8533 阅读 · 1 评论 -
iOS开发——响应链(Responder Chain)的深入理解和代码示例
我在之前一篇博客《iOS响应者链Responder Chain浅析》中对iOS开发中遇到的响应者链概念有了基本的了解。但是仅仅停留在理解概念的基础上还是远远不够的。该博客我们会通过代码案例来深入理解响应链。该博客的示例上传至 https://github.com/chenyufeng1991/ResponderChain 。(1)首先来说说第一响应者(First Responder)。响应事件的原创 2016-05-15 01:27:29 · 9967 阅读 · 1 评论 -
NSMutableDictionary中的小坑与初始化方法详解
今天来讲NSMutableDictionary这个基础,是因为在今天的开发中遇到了一个小小的坑,当发现了这个问题后,着实觉得很不应该,所以在这里做一个记录,也同时同他人分享,少走我的弯路。本案例代码上传至 https://github.com/chenyufeng1991/InitNSMutableDictionary 。 今天遇到的问题是这样的,某个方法返回两种结果,NSMutabl原创 2016-05-09 23:13:54 · 12508 阅读 · 0 评论 -
iOS多线程开发——NSThread浅析
在IOS开发中,多线程的实现方式主要有三种,NSThread、NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,可以参考《iOS多线程开发——NSOperation/NSOperationQueue浅析》《iOS多线程开发——GCD的使用与多线程开发浅析》。以及对于多线程中的同步异步,并行串行等概念,我在《GCD实践——串行队列/并发队列与iOS多线程原创 2016-05-09 01:08:42 · 7688 阅读 · 1 评论 -
iOS多线程开发——GCD的使用与多线程开发浅析
我在前面的博客中《GCD实践——串行队列/并发队列与IOS多线程详解》中对iOS中的同步异步、串行并行做了较为详细的讲解。在之后的几篇GCD实践的博客中对GCD的使用也有较为详细的实现。但是我们要注意的是,那里用到的GCD是别人对苹果的原生GCD接口封装后的使用,虽然用起来更为方便,但是为了有全面的学习,我还是推荐去用苹果原生的GCD。该案例代码上传至 https://github.com/che原创 2016-04-29 18:22:17 · 15335 阅读 · 0 评论 -
iOS开发——使用Navigation和TabBar构造App框架与界面栈的重构
对于iOS开发来说,Navigation和TabBar是最常用到的界面元素。我在前面几篇博客中《iOS开发——代码生成TabBar与视图切换详解》《iOS纯代码实现界面建立、跳转、导航栏(无storyboard、无nib)》《iOS开发——界面跳转与返回及视图类型详解》中较为详细的实现了导航栏和TabBar的实现,以及一些界面跳转的实现。但是,在实际开发中,越来越发现Navigation和TabB原创 2016-04-29 12:46:08 · 7083 阅读 · 2 评论 -
iOS开发——Autolayout的实践与技巧
已经好久没有更新博客了,由于最近工作真的非常繁忙,所以就疏于分享了。今天我们来深入交流一下Autolayout的开发与使用。我在 http://blog.csdn.net/CHENYUFENG1991/article/details/47165751, http://blog.csdn.net/CHENYUFENG1991/article/details/47062527,两篇博客中对Autol原创 2016-04-24 00:13:19 · 7385 阅读 · 1 评论 -
iOS开发——Block引起循环引用的解决方案
内存问题始终是软件开发中的头等大事,iOS开发中也不例外,在面试中也是必问的问题。今天我们主要来讲讲Block中涉及的循环引用问题。当我们自己一开始写代码的时候,可能会大量在block中使用self,但是当看到别人优秀的代码的时候,发现别人常常不是用self,而使用weakSelf. 为什么呢?本文的示例代码上传至 https://github.com/chenyufeng1991/Block_W原创 2016-03-18 01:04:39 · 9907 阅读 · 0 评论 -
Xcode真机调试失败:The identity used to sign the executable is no longer valid
在Xcode中突然好久没有使用真机调试了,今天使用真机的时候,出现如下的警告,并真机运行失败:The identity used to sign the executable is no longer valid.Please verify that your device's clock is proprtly set,and that your signing certificate is n原创 2016-03-16 22:56:44 · 4644 阅读 · 0 评论 -
MacBook Pro使用初体验之Mac快捷键汇总(持续更新中)
我于近日购置了一台13寸的MacBook Pro高配,打算开始进行iOS开发的学习。Pro的配置情况如下:(1)OS X Yosemite ,版本10.10.3(2)Retina显示屏,13英寸(3)处理器2.9Ghz Intel Core i5(4)内存 8G 1867MHz DDR3(5)图形卡 Intel Iris Graphics 6100 1536MB(原创 2015-07-20 22:56:28 · 19857 阅读 · 5 评论 -
Xcode中快捷键汇总(持续更新中)
在IDE的使用过程中,快捷键的时候无疑会大大提高我们的开发效率,我在之前的一篇博客中介绍了我在使用Eclipse中使用到的快捷键,但是来到Xcode中,一切又不一样了,我们又要学习新的快捷键,一开始会不适应,慢慢就会熟悉的。(1)esc: 代码提示。Xcode中的代码提示功能是比较强大的,在代码书写过程中就会自动提示,但是在删除几个字母或者重新修改后,代码可能就不提示了,此时就可以使用左上角原创 2015-07-25 10:24:45 · 5348 阅读 · 1 评论 -
iOS包管理工具Cocoapods的安装与使用
在我们开发移动应用的时候,一般都会使用到第三方工具,而由于第三方类库的种类繁多,我们在项目中进行管理也会相对麻烦,所以此时我们就需要一个包管理工具,在iOS开发中,我们使用最多的就是Cocoapods。 Cocoa是开发OS X下的苹果提供的API,Cocoa Touch是开发iOS触摸类设备的API。比如我们在开发iOS中,常常需要新建一个类,就是用Cocoa Touch Clas原创 2015-08-12 01:23:15 · 10109 阅读 · 4 评论 -
iOS开发经典笔试面试题汇总(持续更新中)
1.单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的的通知机制(正确)理解:NSNotificationCenter使用了KOV,即Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接收到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。2.判断:从通讯录数据库原创 2015-10-12 16:37:43 · 5109 阅读 · 0 评论 -
开源高仿印象笔记的iOS应用——朝夕笔记(Oncenote)
iOS-Oncenote 这是一款类似于印象笔记Evernote的生活类iOS应用——朝夕笔记 Oncenote。我希望能为更多的iOS开发者提供帮助与服务。当然App中还有不少bug和可扩展的功能模块,也希望各位开发者为该项目贡献自己的code力量。项目地址:https://github.com/chenyufeng1991/iOS-Oncenote。大家可以通过点击右上角的fork到自己的G原创 2015-11-23 11:48:57 · 12621 阅读 · 24 评论 -
iOS开发——来改掉那些已经过时的方法吧(持续更新中)
iOS平台在快速的发展,各种接口正在不断的更新。随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first deprecated in iOS 9.0 - Use *******”.就像如图所示:。 在实际项目开发中,我们要秉承一个信念就是:要把每一个警告当做错误来处理,并解决每一个警告原创 2015-11-26 20:20:37 · 11990 阅读 · 3 评论 -
iOS开发效率篇——Xcode优秀插件使用(持续更新中)
我在上一篇博客《iOS开发——使用Alcatraz管理Xcode插件》中介绍了如何安装Alcatraz来管理Xcode中的插件,并主要讲解了一个ColorSense插件来进行颜色的设置,的确是能方便我们的编程。荀子说:君子性非异也,善假于物也。我们不仅要善于编码,还要善于利用工具。废话不说,我把比较不错插件在这里做个介绍。【StringSense】 当我们经常在代码中输入大段字符串原创 2015-12-11 01:27:16 · 7559 阅读 · 7 评论 -
iOS开发编码建议与规范(持续更新中)
在开发过程中,我们不仅要去看别人的代码,也要让别人看我们的代码。那么,有一个良好的编码习惯将会非常重要。下面将会罗列使用Objective-C来开发iOS的编码建议。【1】任意函数长度不得超过50行。(其实很容易就超过50行,这就要考虑代码抽取了。)【2】任意行代码不能超过80字符。(其实也很容易超过80字符,可以考虑多行显示,比如有多个参数时,可以每个参数放一行。)可以在原创 2015-12-11 17:13:21 · 7448 阅读 · 0 评论 -
iOS开发调试技巧总结(持续更新中)
对于软件开发而言,调试是必须学会的技能,重要性不言而喻。对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中。不同语言、不同IDE、不同平台的调试,有同性也有个性。今天我们就来学习一下iOS开发中的调试技巧,语言暂用为OC,IDE当然是强大的Xcode。首先说明下,Xcode已经为我们调试项目提供了极大的方便。【1.普通断点】断点(Brea原创 2016-01-08 09:56:25 · 10507 阅读 · 8 评论 -
安装iOS开发环境Xcode
众所周知,开发iOS应用程序是在Xcode上进行开发的,这是开发iOS的唯一选择,不同于Eclipse/Android Studio之于android。同时对于Android开发来说,iOS开发的环境搭建是比较方便和简单的。下面来简单介绍如何安装Xcode。(1)登录App Store,在搜索框中输入Xcode,出现以下界面:。(2)选择第一个Xcode,进行安装,可见安装Xc原创 2015-07-21 21:04:42 · 2699 阅读 · 1 评论 -
开发第一个iOS项目 Hello iOS
在安装完Xcode之后,就要开始进行iOS应用的开发了。如同所有的软件语言学习一样,我们先写一个最简答的iOS项目:Hello iOS。(1)原创 2015-07-21 21:18:51 · 1964 阅读 · 2 评论 -
iOS项目中工作空间Workspaces概念的理解
我在之前的一篇博客中讨论过Eclipse和Android Studio的工作空间问题,并做了一定的区别。其实只要理解并会使用前两者,Xcode中的工作空间也就不难理解了。我们通过实际的操作步骤来理解Xcode的工作空间。原创 2015-07-21 23:21:16 · 5521 阅读 · 1 评论