iOS

常用API 类 动态创建一个类(参数:父类,类名,额外的内存空间) Class objc_allocateClassPair(Class superclass, const char * name, size_t extraBytes) 注册一个类(要在类注册之前添加成员变量) void objc_registerClassPair(C...

发布 0 条评论

消息机制 OC 中的方法调用,其实就是向方法调用者(消息接受者 reciver)发送一条消息,底层代码则是转换为 objc_msgSend 函数的调用。 比如下面示例代码: @interface Person : NSObject - (void)test:(int)a; @end @implementation P...

发布 0 条评论

概述 runtime 简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。基于 C/C++ 语言和汇编语言编写,苹果和 GNU 各自维护一个开源的 runtime 版本,这两个版本之间都在努力的保持一致。 对于 C 语言而言,函数的调...

发布 0 条评论

1字节存储多个布尔 位运算方式 通过位运算,将多个 BOOL 数值存储到一个 char 类型变量里: // 掩码(Mask),一般用于按位运算,用于取出或修改特定二进制位的值 #define A_MASK (1<<0) // 0b0001 #define B_MASK (1<<1) /...

发布 0 条评论

对象类型的auto变量 在 block 内部访问了对象类型的 auto 变量。 栈 如果 block 是在栈上,将不会对 auto 变量产生强引用。 堆 如果 block 被拷贝到堆上,会调用 block 内部的 copy 函数。 copy 函数内部会调用 _Block_object_assign ...

发布 0 条评论

block的类型 block 有 3 种类型,可以通过调用 class 方法或者 isa 指针查看具体类型。 3 种 类型的 block 都是继承自 NSBlock,NSBlock 又继承自 NSObject。 MRC 环境下 block 的类型和复制效果 类型 环境 内存区域 复制效果 ...

发布 0 条评论

概述 block 本质上也是一个 OC 对象,它内部也有个 isa 指针。 block 是封装了函数调用以及函数调用环境的 OC 对象。 block 的底层结构: 证明 block 是 OC 对象: void (^block)(void) = ^{}; Class blockClass = [block class]; NS...

发布 0 条评论

使用场景 可以减少单个文件的体积。 可以按照功能分组,放到不同的分类里,使类结构更清晰。 降低耦合性,同一个类可以有多个开发人员进行开发。 模拟多继承。 把静态库的私有方法公开。 可以给系统类新增功能。 分类底层结构 在 ob...

发布 0 条评论

概述 KVC 简称 Key-ValueCoding,是一个基于 NSKeyValueCoding 非正式协议的机制,可以允许开发者通过 Key 名直接访问对象的属性,或者给对象的属性赋值,而不需要调用明确的存取方法。 这样就可以在运行时动态访问和修改对象的属性,...

发布 0 条评论

概述 KVO 的全称是 Key Value Observing,俗称 键值监听,可以用于监听某个对象属性值的改变。 基本使用 使用 KVO 监听 person 对象的 age 属性改变: @interface JFPerson : NSObject @property (nonatomic, assign) int age; @end ...

发布 1 条评论

isa指针 instance 的 isa 指向 class。 class 的 isa 指向 meta-class。 meta-class 的 isa 指向基类的 meta-class。 superclass指针 class 的 superclass 指向父类的 class,没有父类(NSObject就没父类)则为 nil。 meta-class 的 s...

发布 0 条评论

参考源码 runtime 的源码:https://opensource.apple.com/tarballs/objc4/ 对象分类 Objective-C 对象简称 OC 对象,可以分为 3 种类型。 instance 对象:实例对象。 class 对象:类对象。 meta-class 对象:元类对象。 instance实例...

发布 0 条评论

OC类转换为C++结构体 OC 代码编译过程:OC -> C/C++ -> 汇编 -> 机器代码 利用 Xcode 自带的 LLVM 编译器前端工具 clang,可以将 OC 代码转成 C++ 代码: clang -rewrite-objc main.m -o main.cpp 一般不会直接使用上面的命...

发布 0 条评论

为什么要动修改器? 有些游戏会检测手机是否安装了 iGG 修改器,如果被检测到有安装,可能会禁止游戏或直接封号。 所以我们可以通过修改 iGG 插件内的一些文件名和包名,从而绕过一些简单检测。 下文这些修改和打包操作,都可以在手机...

发布 1 条评论

原理 在之前笔记中有详细写过越狱机插件开发和执行原理,我们知道插件是依赖 Cydia Substrate 基板运行的。 所以只需要将 Cydia Substrate 基板和 deb 插件内的 dylib 动态库打包进 APP 并加载,然后重签名即可运行在非越狱机上。 我...

发布 0 条评论