iOS之深入解析weak关键字的底层原理
一、weak 关键字
- 在 iOS 开发过程中,会经常使用到一个修饰词 weak,使用场景大家都比较清晰,避免出现对象之间的强强引用而造成对象不能被正常释放最终导致内存泄露的问题。
- weak 关键字的作用是弱引用,所引用对象的计数器不会加 1,并在引用对象被释放的时候自动被设置为 nil。
- weak 的常见场景是在 delegate,block,NSTimer 中使用,以避免循环引用所带来的内存泄漏。
- weak 的用处用一句话可归纳为:弱引用,在对象释放后置为 nil,避免错误的内存访问。用更通俗的话来表述是:weak 可以在不增加对象的引用计数的同时,又使得指针的访问是安全的。
二、weak 的底层分析
① weak 底层入口
- 当我们使用 weak 修饰属性的时候,它是怎么实现当所引用的对象被废弃的时候,变量置为 nil 的呢?在日常开发中,常见的 weak 的使用如下:
id object = [[NSObject alloc] init];id __weak obj
iOS之深入解析weak关键字的底层原理相关推荐
- iOS之深入解析对象isa的底层原理
对象本质 一.NSObject 本质 OC代码的底层实现实质是 C/C++代码 ,继而编译成汇编代码,最终变成机器语言. ① clang C/C++ 编译器 Clang 是⼀个 C 语⾔.C++.Ob ...
- iOS之深入解析内存对齐的底层原理
CPU 存取原理 一."存"示例 CPU 并不是以字节为单位存取数据的.CPU 把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此 CPU 在读取内存时是一块一块 ...
- iOS之深入解析分类Category的底层原理
一.Category 简介 Objective-C 中的 Category 是对装饰模式的一种具体实现.它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法. 分类 Category 可以 ...
- iOS之深入解析通知NSNotification的底层原理
一.概念 ① NSNotification NSNotification 用于描述通知的类,一个 NSNotification 对象就包含了一条通知的信息,NSNotification 对象是不可变的 ...
- iOS之深入解析数组遍历的底层原理和性能分析
一.OC 数组的类体系 当我们创建一个 NSArray 对象时,实际上得到的是 NSArray 的子类 __NSArrayI 对象.同样的,创建 NSMutableArray 对象,得到的同样是其子类 ...
- iOS之深入解析缓存方法cache_t底层原理
一.cache_t 原理 Class 内部中有个方法 缓存 cache_t ,用 散列表 来缓存调用过的方法,可以提高访问方法的速度. struct cache_t {#if CACHE_MASK_S ...
- iOS之深入解析类Class的底层原理
内存偏移 定义一个数组并打印数组中的元素地址: int a[4] = {1,2,3,4};int *b = a;NSLog(@"%p - %p -
- synchronized关键字的底层原理以及JDK1.6之后的底层优化
synchronized关键字底层原理属于JVM层面. 1. synchronized关键字修饰同步代码块,synchronized同步代码块的实现使用的是monitorenter和monitorex ...
- Swift之深入解析反射Mirror的底层原理
一.Mirror 的底层分析 ① 反射 API 反射 API 由两部分实现: 一部分是通过 Swift 实现,即 ReflectionMirror.swift: 一部分是通过 C++ 实现,即 Ref ...
最新文章
- 免费 | 程序员如何在面试中避免被坑?今晚告诉你!
- Linux文件系统中的inode节点详细介绍
- python多线程加锁异步处理装饰器
- 注销凭证与自定义屏幕
- 国外方案 组件化_网页webp解决方案
- Python中的数值类型
- Android merge优化UI
- WinForm DataGridView 绑定泛型List(ListT)/ArrayList不显示的原因和解决
- html中文字空心如何设置,css 中字体文本小诀窍
- 可重组合与不相邻组合
- 如何使用计算机还原魔方?
- 2018秋招暨年度总结
- chrome 常用插件下载安装
- [转载]李开复:什么是领导力
- Mac系统入门之怎么切换输入法
- python 进程详解
- 图的链接分析 (link analysis): PageRank 算法
- 随笔——Docker学习笔记
- 简述电信运营商圈内的三大业务领域-B-M-O
- linux内核版本和发行版本有何区别