如何理解iOS的“对象等同性”

iOS开发过程中,我们经常需要用到等同性来判断两个对象是否相等,通常我们会使用==来判断,但是这样比较出来的结果可能不是我们期望的;所以,一般我们会使用NSObject协议声明的isEqual方法来判断对象的等同性。并且,为了更好的进行深层次的比较,iOS系统中的NSObject子类还实现了各自的isEqual:方法。

== 究竟比较的是什么?

对于基本类型,…

AFNetworking源码简析

AFNetworking基本是苹果开发中网络请求库的标配,它是一个轻量级的网络库,专门针对iOSOS X的网络应用设计,具有模块化的架构和丰富的APIs接口,功能强大并且使用简单,深受苹果应用开发人员的喜爱。

本文主要介绍一下AFNetworking(版本:3.1.0)的模块结构、请求的执行过程、网络状态监测以及网络安全的处理等等,从而对AFNetworking的具体功能、执行过程有一个大致的了解,在实际的项目开发过程中,能够更好的进行应用。

一、结构

下面是AFNetworking的源码结构图,主要分为:…

iOS组件化方案的几种实现

最近研究了一下项目的组件化,把casabanglimboy的有关组件化的博客看了一遍,学到了不少东西,对目前业界的组件化方案有了一定的了解。这些高质量的博客大致讨论了组件化的三种方案:url-blockprotocol-class(和url-controller类似)、target-action,以及应用这三种组件化方案的时机、步骤、利弊等等。

本文主要介绍一下这三种组件化方案的技术实现过程,针对不同组件化方案具体应用过程中可能出现的问题加以介绍,也针对casa批判蘑菇街的组件化方案加以自己的思考,希望对需要了解组件化的朋友有一定的帮助。

为什么需要组件化

随着公司业务的不断发展,项目的功能越来越复杂,各个业务代码耦合也越来越多,代码量也是急剧增加,传统的…

MJExtension框架源码分析

iOS开发中经常会用到数据和模型的互相转换,大致有两种转换方式:1.手动写转换的代码,2.利用开源库进行转换。常用的开源库有:JSONModelMantleMJExtensionYYModel等等,本文主要介绍一下MJExtension的底层实现,看一看小码哥如何设计这个轻量级的数模转换框架。

本着面向应用的角度,我觉得还是从一个字典转模型的例子入手,来详细介绍一下MJExtension的转换过程。

待转换的字典对象:

升级Cocoapods引起的Mantle库找不到的问题及解决方法

年前升级了Cocoapods库,从0.39升级到了1.2.0-beta版,然后用模拟器和真机测试都是没有问题的,均可以成功编译。今天测试人员要测试包,准备archive打包时,却提示:ld: library not found for -lMantle,瞬间感觉哪儿不对,明明可以运行,真机测试也没问题,怎么打包出现找不到Mantle库的问题,然后就开始分析。

1. 升级Cocoapods引起的问题?

iOS之网络请求NSURLSession剖析

2013年的WWDC大会上,苹果推出了NSURLSession,对Foundation URL加载系统进行了彻底的重构,提供了更丰富的API来处理网络请求,如:支持http2.0协议、直接把数据下载到磁盘、同一session发送多个请求、下载是多线程异步处理和提供全局的session并可以统一配置等等,提高了NSURLSession的易用性、灵活性,更加地适合移动开发的需求。


NSURLSession的介绍

NSURLConnection从入门到放弃

尽管NSURLConnection已经不建议使用了,iOS 7取而代之的是NSURLSession,但是本文依然打算剖析一下,其中一些思想还是值得学习一下,如果您不用NSURLConnection,并且也不打算尝试使用,可以跳过本文。

一、概念介绍

NSURLConnection是2003年随着第一版Safari的发布而发布的,它不单单是一个网络请求类,而是指代Foundation框架的URL系统中的一系列关联的组件:NSURLRequest

iOS蓝牙BLE开发

蓝牙是一个标准的无线通讯协议,具有设备成本低、传输距离近和功耗低等特点,被广泛的应用在多种场合。蓝牙一般分为传统蓝牙和BLE两种模式:传统蓝牙可以传输音频等较大数据量,距离近、功耗相对大;而BLE则用来传输节点数据,传输数据量十分小,多数情况处于休眠状态,因而功耗十分低,被广泛的应用于智能穿戴设备。

蓝牙BLE简介

本文主要介绍iOS的蓝牙BLE开发流程,在介绍具体开发流程之前,有必要了解一下蓝牙BLE的特点。BLE通过属性(attribute)在clientserver

iOS – Block底层解析

BlockiOS开发中一种比较特殊的数据结构,它可以保存一段代码,在合适的地方再调用,具有语法简介、回调方便、编程思路清晰、执行效率高等优点,受到众多猿猿的喜爱。但是Block在使用过程中,如果对Block理解不深刻,容易出现Cycle Retain的问题。本文主要从ARC模式下解析一下Block的底层实现,以及Block的三种类型(栈、堆、全局)的区别。

一、Block定义

1. Block

iOS Notification – 远程通知

本文讲解iOS的远程通知的基本使用,主要包括远程通知的类型,处理远程通知的场景,以及远程通知相关证书的配置等等。

一、APNs简介

        APNs是苹果公司提供的远程通知的服务器,当App处于后台或者没有运行时,如果后台需要发送通知,那么就需要借助APNs服务器。在App接收通知的过程中,通知的发送路径是:

Provider -APNs服务器 -iPhone -…