深入浅出ARC(下)

终于到最后一篇了,前面两篇几乎没有涉及到ARC,全是内存管理,这一次要好好研究一下ARC的底层实现,在看的过程中感觉以前学得C++忘的差不多了。这一篇主要讲ARC的strong,weak,__autorelease修饰符背后发生了什么。

__strong

找了很多资料,发现还是书上的解释比较靠谱,在strong类型对象超出作用域后会调用objc_release函数,当然在属性为strong的情况下赋值是会走这个方法objc_storeStrong,这个也是比较标准的setter方法的写法。

Read More

深入浅出ARC(中)

这篇主要探究一下dealloc额外做的两三事,autorelease的内幕,以及ARC的使用规则。本来不准备写dealloc和autorelease的,不过昨天在看源码的时候发现还是很有意思的,然后也是为了内存管理的完整性,就顺带着记录下来了。

dealloc搞得鬼

上一次看到这里发现了一个objc_destructInstance函数的调用,这次主要就是探究下,这个函数做了什么。

Read More

深入浅出ARC(上)

最近和同事在讨论一个循环引用问题的时候,不经意间讨论到了内存管理的本质到底是什么,于是翻出《Objective-C高级编程》一看,但是发现上面有些问题,可能是比较旧了,苹果有了新的实现,所以拿出Objc源码研究了下,下面是自己研究的内容,如果理解有误,请定要联系我纠正。

内存管理

大家都知道,Objc是通过引用计数来管理内存的(Mac除外啊,毕竟处理器牛逼),主要就遵循以下几个原则:

  1. 自己生成的对象,自己持有。
  2. 非自己生成的对象,自己也能持有。
  3. 不再需要持有的对象,自己可以释放。
  4. 非自己持有的对象不能释放。

其实这些就是对应了Objc中得alloc,retain等方法,这些是引用计数的思考方式,并不因是否ARC改变,那么接下来看一下一些底层实现。

Read More

Think in Block(下)

这一篇主要浅析下Block和Objc的关系,更加偏向于实际应用。其实大多数时间我们是和Objc对象打交道,知道一点原理,能避免死的不明不白。

在这个过程中也会回答前面留下的坑- -,探究下来感觉,纸上得来终觉浅,以前也看过这本书,但是一直没有动手敲代码,浮于表面了。

截获Objc对象

先看下源程序,声明了一个Block对象,这次用到了copy,然后最后调用了三次,输出的结果是1,2,3。这一次转换后的代码非常多,不过抽离出来后也很简洁。

Read More

Think in Block(上)

Block 简介

这不是一篇介绍如何使用Block的文章,主要想要探究一下系统背后Block发生了什么,主要参考的是《Objective-C高级编程》这本书,不过这本书本身也有些年代了,苹果实现的机制也有了一些改变。实践出真知,不清楚的地方自己动手试一下,会有意外地收获。

Block是什么

苹果官网说法:
A block is an anonymous inline collection of code, and sometimes also called a “closure”.

通俗的讲:
闭包就是能够读取其它函数内部变量的匿名函数

与普通函数的区别:
普通函数能使用局部变量,参数,静态变量,静态全局,全局变量,并且有自己的函数名。
block除了能使用这些外还能使用其他函数内的变量,而且没有函数名。

Read More