OC底层,iOS相关知识回顾
触发事件响应时
用[address nextResponder]
获取下一个响应者,
一般顺序view > viewController > window > UIApplication > UIAppDelegate > nil
如果button设置target为nil,则会一层层向下寻找responder
寻找button的action
1.打印响应者
[address allTargets]
2.打印button的action
[address actionsForTarget:响应者address forControlEvent:UIcontrolEventTouchUpInside]
myClass.isa = metaMyClass
myClass.superClass = NSObject;
meta myClass.isa = meta NSObject;
meta myClass.superClass = meta NSObject;
类的结构
Class > _class_t > _class_ro_t > _method_list_t > _objc_method
运行时类的结构
Class > objc_class > class_data_bits_t >class_rw_t > class_ro_t
实例方法保存在class中,而类方法,保存在meta class中
objc_msgSend 动态查找过程
1.在objc_class的cache 缓存方法列表里查找
2.在相应对象的方法列表里查找,_method_list_t
3.到父类指针指向的对象中执行1,2步
4.直到根类没找到,执行消息转发
5.调用resolveInstanceMethod 有机会让类添加这个函数的实现
6.调用forwardingTargetForSelector 让其他对象执行这个函数
7.调用forwardInvocation 更灵活的处理函数调用
8.以上操作没找到,无特殊处理,抛出doesNotRecognizeSelector异常
kvc由NSKeyValueCoding协议提供,NSObject实现这个协议
动态添加属性
objc_setAssociatedObject(实例对象,属性名,属性内容,关联策略(OBJC_ASSOCIATION_ASSIGN等));
objc_getAssociatedObject(实例对象,属性名);
属性名
声明
static void *kAssociatedKey 用&kAssociatedKey
static const void *kAssociatedKey = &kAssociatedKey,用kAssociatedKey
将selector作为key
app签名原理
请求证书颁发,
1.生成certSigningRequest文件,并在证书助手生成一对公私钥
certSigningRequest包含内容
申请者信息
申请者公钥
摘要算法和公钥加密算法
2.取出certSigningRequest的公钥,
账号信息,
以上两者通过哈希算法生成的信息摘要
信息摘要通过苹果的CA私钥加密,生成数字签名
信息,公钥,数字签名将包含在苹果后台返回的.cer文件中
苹果验证流程
账号信息+公钥哈希加密,
iOS系统中与CA私钥对应的公钥解密数字签名
以上两者相同时证明(证书)公钥可信