weak特性总结
2017-03-27 本文已影响21人
阿咿呀嘿
1. weak特性是在iOS4之后才开始支持的,即iOS4及以下是不能使用__weak修饰符的。
2. 若变量使用__weak修饰,则当其所引用的对象被release时,变量会自动被设置为nil。
原理:
系统有一个全局的weak对象哈希表,表中每个条目的key为weak变量所指对象的内存地址,value是由所有指向该对象的weak变量的内存地址组成的集合。在对weak变量赋值时,以赋值对象的内存地址为key,将weak变量地址加入到对应集合中,实现weak对象的注册。对象被release时,从weak对象哈希表中查找以对象的内存地址为key的weak变量地址集合,遍历集合将其中所有变量设置为nil,最后从weak表中删除该条目。