关于 static

本文尝试回答 static 关键字的区别 Objective-C 中 static 修饰的变量存储的位置? OC 全局静态变量和局部静态变量的区别? OC 全局静态变量和全局变量的区别? static 关键字在 OC 和 Swift 中的区别? Swift 中 static 修饰的类属性存储的位置? static 变量和 macho文件的关系? OC 中的 `stati ...

Objective-C运行时学习笔记-消息派发机制

之前的文章文章聊了一下Objective-C运行时机制的内容,这篇接着上篇文章最后的引子,继续聊一下 Objective-C 的运行时消息发送机制。 Objective-C 的消息发送机制全都依赖于运行时,这点是和新晋的 Swift 语言有很大的不同,Swift 的消息派发机制主要是依赖于静态绑定(static binding),即编译器明确的知道要执行哪个方法,直接生成在编译的时候就生成好跳转 ...

Objective-C运行时学习笔记-继承体系

其实也不好说是学习笔记还是复习笔记了,Objective-C 这语言从毕业开始一直用,直到 18 年前后换成了 Swift. 前几天看 JS 原型链的时候发现,这个和 OC 语言的继承体系好像啊,趁着这个机会回顾一下 OC 语言中的继承实现。 说起 OC 的继承实现就不能不提到支持 OC 这门语言运行的机制 runtime. 网上相关的文章已经介绍烂了,为了方便我自己之后回顾,我还是从自己理 ...

iOS开发中JSON-Model转化

iOS 开发中经常遇到的数据类型转换发生在网络请求回来的时候,字符串转成 Foudation Object(比如 Dictionary 或者 Array)然后再转换成我们定义好的 Model 类型,一般来说就是 JSON 转 Model。 Objective-C 时代的解决方案 之前使用 Objective-C 进行开发的时候,OC 并没有提供对 JSON 转化成 Model 很好的支持 ...

Objective-C 计算对象内存大小

系统提供了两种计算对象实例内存大小的方式 通过 runtime 提供的 class_getInstanceSize API 通过底层的 malloc_size 方法。 但是这两个 API 可能会返回不同的结果,看下下面的代码预期会发生什么 sizet size = classgetInstanceSize([NSObject class]); size_t ...

Block 理解

本文将按照如下顺序逐个说明 Block 的本质 Block 捕获成员变量 Block 的存储域以及内存生命周期分析 Block 捕获成员变量的生命周期 GCD 里面的 Block 分析 MRC & ARC 下 Block 内存管理区别 Block weak 分析 / strongSelf 分析 一些常问的关于 Block 的面试题回答 本 ...

Objective-C 里的拷贝

Objective-C 语言里的拷贝就是对象拷贝,即创建一个跟之前的实例对象一模一样的对象。一般来说数据模型类是需要支持拷贝的。Objective-C 里拷贝又分为浅拷贝(shallow-copy)和深拷贝(deep-copy)。 浅拷贝和深拷贝区别 浅拷贝只是复制一下对象指针,但是拷贝前和拷贝后的对象指针均指向同一内存区域,只不过是对象的内存引用计数加一。 深拷贝为拷贝前 ...

AutoreleasePool 理解

从一些问题开始 什么是 AutoreleasePool ? 说明一下 NSAutoreleasePool 具体机制? ARC 时代和 MRC 时代的 AutoreleasePool 机制有什么区别? AutoreleasePool 的实现机制? AutoreleasePool 和 NSRunloop 有什么关系? `AutoreleasePool ...

属性自动合成

Clang 编译器提供了 OC 自动合成属性的功能。如果一个属性没有被声明为 @dynamic 或者开发者没有自定制它的 getter 或者 setter 方法实现。那 Clang 会自动为你合成 getter 和 setter 方法的实现同时生成对应的成员变量,检查 Clang 编译器是否支持自动合成使用`_hasfeature(objcdefaultsynt ...

属性 attribute 总结

@property 和 attribute 的中文翻译都是属性,所以本文就只用英文做区分了。property 的不同 attribute 大致包含下面这些 strong //default weak copy assign //default unsafe_unretained atomic & nonatomic //default atom ...