Runtime
MeteoriteMan
iOS开发者
展开
-
SEL消息以及消息发送机制
我们知道Objective-C是一门动态语言.对象的类型在执行的时候才会被确定.就比如说NSObject *object = [[NSString alloc] init]这行代码在编译的时候object的类型是NSObject.然后运行的时候是NSString类型. 那么这个动态类型动态是怎么来的呢. 在OC的一个类的头文件中我们可以定义+类方法以及-对象方法.不管是对象方法还是类方原创 2018-01-20 14:10:38 · 390 阅读 · 0 评论 -
窥视OC方法底层
上面我们讲了一下clang命令能够重写OC代码并且转换为C++代码.那么,我们试着用这个clang命令来窥视一下OC的底层吧.1.我们还是使用上次工程创建的Person.m的实现文件.我们往Person.m中添加两个方法.一个类方法,一个对象方法.#import "Person.h"@implementation Personstatic NSString *str =...原创 2018-03-16 09:34:20 · 272 阅读 · 0 评论 -
深挖OC中的类与对象
不用说大家也都知道.类是对象的抽象,对象是类的实例化.那么,大家有没有去探究过类和对象的底层呢首先,什么是类呢:(注:OBJC2_UNAVAILABLE是为了兼容OC2.0以下的宏定义,我直接省略掉了)/// An opaque type that represents an Objective-C class.///表示Objective-C类的不透明类型(软件翻译...原创 2018-03-12 18:29:14 · 217 阅读 · 0 评论 -
Clang浅尝辄止
Clang是一个C语言、C++、Objective-C、Objective-C++语言的轻量级编译器。我们可以使用clang命令来重写OC的.m文件(重写之后以C++文件的形式展现在相应的文件夹里头.首先.我们使用cd命令或者是直接拖动的方式把终端目录改到想要操作的.m文件的目录.(比如,下面我们要重写Person.m) 然后我们在终端输入clang -rewrite-o...原创 2018-03-13 14:58:36 · 2085 阅读 · 0 评论 -
Reveal查看任意App界面以及解决由于Reveal版本更新导致的动态库文件过期的问题
今天Reveal更新到了14(10107)版本.然而,本次更新改动了Reveal带的动态库文件. 首先,我来介绍一下Reveal如何查看任意App的界面.1.首先,我们下载一个Reveal. 这个可以去官网下载免费(14天试用).或者是去下载PJ版的(PJ的现在应该是2.几).2.准备一个越狱过的机器. 本人用的是爱思助手越狱的iOS9的iPhone5s(PS:5s前几...原创 2018-04-15 12:18:04 · 1230 阅读 · 1 评论 -
iOS分类添加属性
我们可以通过runtime来给iOS的分类添加属性. 想添加属性,记住几个关键词,1.@dynamic 2.Associated1. 首先我们像普通的类一样在.h里头使用@property声明一个属性 ///xxx+CH.h.这里是xxx类的CH分类的.h文件 @interface xxx (CH) @property (nonatomic ,stro...原创 2018-09-05 23:46:03 · 2342 阅读 · 0 评论 -
iOS交换系统方法
交换系统方法也属于runtime的一部分1.首先导入runtime #import <objc/runtime.h>2.取出系统方法与你写的方法 Method systemMethod = class_getInstanceMethod(self, @selector(systemMethod)); Method my_Method = cl...原创 2018-09-07 00:42:51 · 3903 阅读 · 1 评论 -
通过runtime动态创建一个类
步骤要创建一个新类,首先调用objc_allocateClassPair。 然后使用class_addMethod和class_addIvar等函数设置类的属性。 完成构建类后,调用objc_registerClassPair。参数/** * 创建一个新类和元类. * * @param superclass 这个类是新创建的类的父类,可以传入Nil去创建一个新根类. * @p...原创 2019-07-27 22:47:37 · 826 阅读 · 0 评论