KVO 的实现 #是啥?KVO 是通过一个 key 来找到某个属性并监听其值的改变。其实这也是一种典型的观察者模式。 #咋用? 添加观察者 在观察者中实现监听方法:-observeValueForKeyPath: ofObject: change: context:。 移除观察者 #示例: 1234567891011121314151617//Person.h#import "Model.h" 2018-04-13 OC #机制
KVC 的实现 1.KVC是啥?键值编码(key value coding)是一种可以通过字符串的名字(key)来访问类属性的机制。区别于通过调用Setter、Getter来访问属性的方法。 2.啥用?通常我们要访问一个类中属性的值时,可以使用点语法(如 people.name)。但当你想访问私有属性或成员变量时,点语法就没用了。而有了 KVC 问题就迎刃而解。 常用方法? NSKeyValueCoding. 2018-04-12 OC #机制
weak 的实现 weak 表示的是一个弱引用,不会增加对象的引用计数,并且在所指向的对象被释放之后,weak 指针会被置为nil。weak 引用通常是用于处理循环引用的问题。 实现原理: 初始化: runtime 调用 objc_initWeak 函数,初始化一个新的 weak 指针指向对象的地址。 添加引用: objc_initWeak 调用 objc_storeWeak 来更新指针指向,创建对应的弱 2018-03-27 OC #机制
block 的实现 #1.block:从本质上来说,block是带有自动变量的匿名函数,是闭包在 OC 中的实现。 1.1.语法#block表达式: ^ 返回值类型 (参数列表) {表达式} #示例1.1: 123^int(int a, int b) { return a * b;}; #block类型变量: 返回值类型 (^变量名)(参数列表) = Block表达式 # 2018-03-15 OC #block
循环引用 1.概念循环引用可以简单理解为 A 强引用 B,B 又强引用了 A,双方同时保持对方的一个引用,导致引用计数不为0,始终无法释放。 影响? 导致对象无法释放,造成内存泄露。如果是 ViewController 内出现循环引用,在反复 push & pop 后,ViewController 释放不掉,导致内存激增,甚至引发crash。 2.场景2.1.block下面是一段关于 block 的 2018-03-05 OC #block #内存管理 #循环引用
AFNetworking 1.导入库导入 AFN 的 Podfile: 12345source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'target 'TargetName' dopod 'AFNetworking', '~> 3.0'en 2018-01-31 OC #源码
SDWebImage 1.导入12345platform :ios, '10.0'//ASDF替换为自己项目的target名target ‘ASDF’ dopod 'SDWebImage', '~> 3.7.3'end 2.实现以常用的UIImageView设置图片为例: 12345- (void)sd_setImageWithURL:(NSURL * 2018-01-28 OC #源码
.a & .framework 1.库?库是代码的集合、共享代码的一种方式。分为: 开源库:源代码公开,能看到具体的实现。(如SD、AF) 闭源库:源码不公开,是经过编译后的二进制文件,看不到具体实现。 其中,闭源库有两种形式: 静态库:.a 和 .framework 动态库:.dylib 和 .framework 问:framework 为啥即是静态库又是动态库? 答:系统提供的.framework是动态库,我们自定义 2018-01-25 OC #机制
离屏渲染 1、Cell 的重用#示例1:常见用法 123456789101112- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; U 2018-01-20 OC #机制
响应者链 & 传递链 1.响应者UIResponder,用来响应用户的操作并处理各种事件: 触摸事件 加速计事件 远程控制事件 继承自UIResponder的类对象,如UIView、UIViewController、UIApplication,才能接收和处理事件,它们被称为“响应者对象”。UIResponder.h中定义了如下处理方法: 12345678910111213//处理触摸事件- (void)touche 2018-01-07 OC #机制