w
h
y
?
y
o
u
a
r
e
h
e
r
e
?
objc_msgSend的具体流程如下:
通过isa指针找到所属类
查找类的cache列表
为什么会有cache列表呢
因为cache列表会提高效率
经常用的方法放到一个一个表里查的更快
如果没有则下一步
查找类的方法列表
如果能找到与选择子名称相符的方法,
就跳至其实现代码
找不到
就沿着继承体系
...
UIView的继承结构为UIResponder : NSObject
UIResponder是用来响应事件的,也就是UIView可以响应用户事件
CALayer的继承结构为NSObject
直接从NSObject继承
因为缺少了UIResponder类
所以CALayer不能响应任何用户事件
CAL
...
Swift有一个好处就是不用在每行结尾加;号
但是一行有多个语句是就要加上;
但当你在同一行书写多条语句时,必须用分号隔开:
let定义常量
var定义变量
lazy延迟存储属性必须用var
var定义变量带get和set方法的叫计算属性
override重写属性的时候也要加上
final的类不能被
...
生成不加密的私钥
12openssl genrsa -out rsa_private_key.pem 1024openssl pkcs8 -in rsa_private_key.pem -out rsa_private_key_pkcs8.pem -nocrypt -topk8
生成对应私钥的公钥
...
block从表面看相当于一个带有自动变量的匿名函数
因为block可以传入参数有并且有返回值
在block里还能获取到外部的变量
但是默认block是不能修改局部变量的值
而且block捕获的是变量的瞬时的值
但是block可以修改静态变量、静态全局变量和全局变量
如果想要修改局部变量的值
需要在局
...
顾名思义
协议就是双方要协商好的意思
也就是一方负责制定规则,一方需要遵守规则
在iOS中协议主要是用于方法回调
还有就是代码的封装
因为协议里面的方法默认是必须实现
这样的话就可以把必须实现的方法写到协议里面
防止使用的时候被遗忘更加的安全
还有就是在iOS中没有多继承
但是可以通过多个协议来实现
...
说到面向对象不得不说的三个特点
封装继承和多态
比如用计算器来说
假如目前只是需要加法
面向过程就是直接把加法的代码里写进去
面向对象会把计算器单独作为一个文件
然后把加法单独写一个方法
然后后来有的地方需要新增一个减法的功能
面向过程就会在当前的地方直接把减法的写进去
面向对象只需要在建一个文件继
...
iOS内存由低到高分为五个区
.text段(代码区)、.data段(已初始化的全局变量、静态变量)、.bss段(未初始化的全局变量、静态变量)、堆区、栈区
栈内存由系统管理
堆内存由开发者管理
栈内存存储变量参数
堆内存存储对象
内存管理的几种方式
手动管理MRC
谁创建,谁释放。谁retain,谁
...
Category分类
Extension扩展
Extension是编译时就决议生效的可以添加实例变量方法属性
Category是运行时决议生效的可以添加方法属性(属性不会自动生成getset方法需要手动生成)
1234567891011121314struct objc_class {
...
说到KVC不得不说Set和Get
正常访问属性都是用Set方法和Get方法
但是苹果还提供了另外一种方法就是KVC全称Key-Value Coding 中文就是键值编码
简单点来说就是直接
用valueForKey和valueForKeyPath来获取属性的值
用 setValue forKey和
...