美文网首页iOS
weak特性总结

weak特性总结

作者: 阿咿呀嘿 | 来源:发表于2017-03-27 19:46 被阅读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表中删除该条目。

3. 使用weak变量,即是使用注册到autoreleasepool中的对象。

4. 只在必要的时候使用weak特性,如果滥用会浪费CPU资源。

5. 使用weak型变量时,最好暂时将weak对象赋值给一个strong变量再使用。因为每次使用weak变量时,都会向autoreleasepool中注册一次对象,频繁注册导致资源浪费。

6. 不是所有的类的对象都能使用__weak修饰。一、声明时指定了 NS_AUTOMATED_REFCOUNT_WEAK_UNAVAILABLE 的类的对象都不能使用__weak修饰,比如NSMachPort。二、重写了NSObject内部的allowsWeakReference/retainWeakReference实例方法,并返回NO的类的对象不能使用__weak修饰。

相关文章

  • weak特性总结

    1. weak特性是在iOS4之后才开始支持的,即iOS4及以下是不能使用__weak修饰符的。 2. 若变量使用...

  • weak 底层实现原理

    总结:weak 是Runtime维护了一个hash(哈希)表,用于存储指向某个对象的所有weak指针。weak表其...

  • iOS知识复习笔记(2)---weak相关

    weak相关总结 1.weak是底层runtime维护了一张weak_table_t结构的hash表,key是所指...

  • iOS中Weak的底层实现

    本文主要是解析Weak这种特性的底层实现。 weak 此特质表明该属性定义了一种“非拥有关系” (nonownin...

  • weak总结

    系统创建了一个全局的哈希表SideTables,它使用对象的内存地址作key,值为SideTable结构体。Sid...

  • iOS 中定义属性时的atomic、nonatomic、copy

    iOS编程中,定义属性中的特性有atomic、nonatomic、copy、assign、strong、weak等...

  • weak的实现原理

    总结: Runtime会维护一个weak表,用于维护指向对象的所有weak指针。weak表是一个哈希表,其key为...

  • 定义属性的关键字总结

    定义属性中的特性有atomic、nonatomic、copy、assign、strong、weak等,一般格式如下...

  • weak的实现原理

    weak的实现原理总结记录 根据代码: 来分析weak的实现过程。 objc_initWeak 运行后,首先会调用...

  • iOS 12正式版新特性总结

    iOS 12正式版新特性总结 iOS 12正式版新特性总结

网友评论

    本文标题:weak特性总结

    本文链接:https://www.haomeiwen.com/subject/wfgrottx.html