Runtime之NSObject结构
简介
OC是一门面向对象的语言,而对于面向对象语言来说一切皆对象
。相信每个iOS开发者都很清楚在OC中NSObject是绝大多数对象的父类。OC是一门动态语言,而动态的实现则是离不开Runtime。那么OC中的对象在Runtime中又是以一种什么样的形态出现的呢?本篇文章我们来详细介绍OC对象在Runtime中的结构。
应用启动-Main函数之前的那些事儿
在上一篇文章中我们介绍了应用启动在objc_init方法执行前的调用堆栈,根据这个堆栈我们可以看出在main函数之前实际上系统内核以及dyld还做了很多的操作,那么这篇文章我们来详细的看一下在这个过程中到底做了哪些事情。
Mach-O 探究
Mach-O
为Mach Object
文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。Mach-O
格式为大部分基于Mach
内核的操作系统所使用的,包括NeXTSTEP
, Mac OS X
和iOS
,它们都以Mach-O
格式作为其可执行文件,动态库,目标代码的文件格式。
RunTime解析--Category(分类)实现
在日常的开发中,我们经常用到分类,用来给一个类添加扩展,包括对象方法、类方法、当然我们还可以通过关联对象的方式给分类添属性。但是这中间的过程是如何实现的呢?下面我们来做一个详细的解释。
SideTable结构
iOS开发者都知道,当一个对象被释放时,所有对这个对象弱引用的指针都会释放并置为nil,那么系统是如何存储这些弱引用对象的呢?又是如何在一个对象释放时,将这些指向即将释放对象的弱引用的指针置为nil的呢?下面我们通过分析SideTable
的结构来进一步了解内存管理的弱引用存储细节。
内存管理之Tagged pointer
iOS开发者对引用计数
这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念,当引用计数为0时,对象就会被释放。但是,真的是所有对象都是这样吗?
retain和release实现探究
前面一篇文章,我们讲到了系统为了优化数字字符串等类型的数据存储新增了一种NSTaggedPointer
类型,同时我们还发现,isa
指针在经过优化后,提供了19个bit位用来存储引用计数的个数。但是如果超出了这个限制呢?
Xcode之断点调试
Xcode这个开发工具的使用相信每一个iOS开发者都已经可以熟练使用,但是要说到所有功能都详细了解,想必人数不多,这篇文章主要介绍xcode的断点调试功能。