objc
麦晓宇
个人从事程序化交易、ios,android开发,逆向
展开
-
深入解析 Objective-C 中方法的结构
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。在上一篇分析 isa 的文章《从 NSObject 的初始化了解 isa》中曾经说到过实例方法被调用时,会通过其持有 isa 指针寻找对应的类,然后在其中的 class_data_bits_t 中查找转载 2017-05-04 09:07:27 · 2483 阅读 · 0 评论 -
从 NSObject 的初始化了解 isa
因为Objective-C的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。如果你曾经对Objective-C底层的实现有一定的了解,你应该会知道 Objective-C 对象都是 C 语言结构体,所有的对象都包含一个类型为 isa 的指针,那么你可能确实对Object转载 2017-05-04 09:31:11 · 818 阅读 · 0 评论 -
Objective-C Method Swizzling 的最佳实践
Objective-C 中的 Method Swizzling 是一项异常强大的技术,它可以允许我们动态地替换方法的实现,实现 Hook 功能,是一种比子类化更加灵活的“重写”方法的方式。Method Swizzling 的原理Method Swizzling 是一把双刃剑,使用得当可以让我们非常轻松地实现复杂的功能,而如果一旦误用,它也很可能会给我们的程序带来毁灭性的伤害。但是我转载 2017-05-04 14:56:05 · 382 阅读 · 0 评论 -
Objective-C类成员变量深度剖析
目录Non Fragile ivars为什么Non Fragile ivars很关键如何寻址类成员变量真正的“如何寻址类成员变量”Non Fragile ivars布局调整为什么Objective-C类不能动态添加成员变量总结版权声明:看下面的代码,考虑Objective-C里最常见的操作之一——类成员变量访问。- (void)doSomething:(Some转载 2017-05-18 16:12:27 · 1065 阅读 · 0 评论 -
Runtime基础使用场景-拦截替换方法(class_addMethod ,class_replaceMethod和method_exchangeImplementations)
前话这几天在系统的学习 runtime,在学习 runtime 的基础使用案例中,"方法替换"这种使用情况下,发现有两种写法. 其实也不是两种写法,准确的来说一种是比较严谨的,另一种则没有那么严谨.发现这两种写法的差异后,我主要集中在下列:class_addMethodclass_replaceMethodmethod_exchangeImplementations转载 2017-06-19 16:39:04 · 5152 阅读 · 1 评论 -
谈谈ARC下的内存管理
什么是ARCARC(Automatic Reference Counting),自动引用计数,是从OX X Lion 和iOS5引入的内存管理技术。在Objective-C中采用ARC机制,让编译器来进行内存管理,在ARC有效的状态下,用户无需再次键入retain或者release代码,这在降低程序奔溃、内存泄漏等风险的同时,很大程序上减少了开发程序的工作量。编译器能立刻释放那些不再被使用转载 2017-06-08 20:09:44 · 724 阅读 · 0 评论 -
在Window环境下,使用CodeBlocks+GNUStep 配置Objective-C开发环境
需要的软件和工具:1. codeblocks-13.12-setup.exe2. gnustep-msys-system-0.25.1-setup.exehttp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-msys-system-0.25.1-setup.exe3. gnuste转载 2017-11-07 14:22:19 · 593 阅读 · 0 评论 -
objc - 编译Runtime源码objc4-709
前提为了深入理解OC的Runtime机制,我们可以通过Apple开源出来的Runtime源码编译出自己的libobjc.A.dylib,然后自己添加target断点调试,从而深入理解objc的特性。想直接拿到可编译版本的同学,可以去我的Github objc-709下载。本文环境是macOS系统10.12.6,Xcode9.x一、下载源码打开苹果开源项目目录,⌘+F搜索下面的项目:objc4、Li...转载 2018-07-14 11:26:57 · 1407 阅读 · 0 评论