闲聊内存管理

前言 ARC的内存管理 retain release weak dealloc __unsafe_unretained 尾话 前言 ARC作为一个老生常谈的话题,基本被网上的各种博客说尽了。但是前段时间朋友通过某些手段对YYModel进行了优化,提高了大概1/3左右的效率,在观赏过他改进的源码之后我又重新看了一遍ARC相关的实现源码,主要体现ARC机制的几个方法分别是retain、release以及dealloc,主要与strong和weak两者相关 ARC的内存管理 来看看一段ARC环境下的代码 - (void)viewDidLoad { NSArray * titles = @[@"title1", @"title2"]; } ...
Click to read more ...

定时器动画

关于定时器 声波动画 弹性动画 其他 任何动画离不开一个重要的概念——时间,CoreAnimation动画创建后在动画后续的不同时间点渲染了不同的图像帧,使值改变前后生成一个过渡的流畅动画 定时器的作用类似于CoreAnimation的操作,在定时器启动后对应的时间点插入回调任务。如果每个回调任务之间的间隔足够短,并在每个任务之间绘制图案,就能达成自制动画的效果。本文分别使用NSTimer和CADisplayLink两个定时器来实现不同的动画 关于定时器 iOS开发中有三种常见的定时器:NSTimer、CADisplayLink以及GCD Timer,前两个定时器在使用时要加入到某个运行的RunLoop当中,在每个回调时间点会唤醒线程,执行任务。GCD Ti...
Click to read more ...

位运算

前言 基础计算 位运算符 色彩存储 位运算应用 位运算与算法 位运算与密码 前言 现代计算机电路通过高电平/低电平两种状态,即为1/0状态,将数据按照特定的编码格式存储起来。 直接操作这些二进制数据的位数据就是位运算,在iOS中基本所有的位运算都通过枚举声明传值的方式将位运算的实现细节隐藏了起来: typedef NS_OPTIONS(NSUInteger, UIRectEdge) { UIRectEdgeNone = 0, UIRectEdgeTop = 1 << 0, UIRectEdgeLeft = 1 << 1, UIRectEdgeBottom = 1 <&l...
Click to read more ...

均衡代码职责

码农小明的项目 尾语 文章的标题有点绕口,不过想了半天,想不到更好的标题了。本文的诞生有一部分功劳要归于iOS应用现状分析,标题也是来源于原文中的“能把代码职责均衡的划分到不同的功能类里”。如果你看过我的文章,就会发现我是一个MVC主导开发的人。这是因为开发的项目总是算不上大项目,在合理的代码职责分工后项目能保持良好的状态,就没有使用到其他架构开发过项目(如果你的状态跟笔者差不多,就算不适用其他架构模式,你也应该自己学习) OK,简短来说,在很早之前我就有写这么一篇文章的想法,大致是在当初面试很多iOS开发者的时候这样的对话萌生的念头,下面的对话是经过笔者总结的,切勿对号入座: Q: 你在项目中使用了MVVM的架构结构,能说说为什么采用的是这种结构吗? ...
Click to read more ...

单例模式

概述 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 整个应用生命周期中,只存在唯一一个实例对象的类被称作单例,所以的模块共同使用这一个对象的设计叫做单例模式 单例模式Singleton具有如下优点: 多个模块共用同一个对象,保证了数据的唯一性 统一逻辑功能,具有较高的灵活性 在iOS开发中,本身也会接触到不少的系统单例,例如NSNotificaitonCenter通知中心、UIApplication应用单例等类,在swift中主要使用两种方式进行单例的创建,通常我将用户数据存储为单例方便不同模块访...
Click to read more ...

享元模式

概述 实战 总结 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF提出了23种设计模式,本系列将使用Swift语言来实现这些设计模式 概述 通过共享已存在的对象,减少创建对象内存开销的设计模式被称作享元模式 享元模式Flyweight和单例模式Singleton像是一对孪生兄弟,二者的表现方式非常相似,但二者的存在目的却不一样: 单例模式 保证了整个应用声明周期内,同一个对象只会存在一份内存,并且任何时间都能被访问使用。 享元模式 如果存在可以复用的对象,那么对象将被共享而不是创建新的对象 在iOS开发中,享元模式的最佳实践就是UITableView的复用机制——超出屏...
Click to read more ...

UITextField的那点事

输入限制 限制扩展 自定义的限制 键盘遮盖 尾语 UITextField被用作项目中获取用户信息的重要控件,但是在实际应用中存在的不少的坑:修改keyboardType来限制键盘的类型,却难以限制第三方键盘的输入类型;在代理中限制了输入长度以及输入的文本类型,但是却抵不住中文输入的联想;键盘弹起时遮住输入框,需要接收键盘弹起收回的通知,然后计算坐标实现移动动画。 对于上面这些问题,苹果提供给我们文本输入框的同时并不提供解决方案,因此本文将使用category+runtime的方式解决上面提到的这些问题,本文假设读者已经清楚从UITextField成为第一响应者到结束编辑过程中的事件调用流程。 输入限制 最常见的输入限制是手机号码以及金额,前者文本中只能存在...
Click to read more ...