1.结构 struct magic_t {     /* 魔法 */     static const uint32_t M0 = 0xA1A1A1A1; #   define M1 "AUTORELEASE!"     static const size_t M1_len = 12;     uint32_t m[4]; /* 省略各种方法 */ #   undef M1 }; /* AutotRelease 重要:重载了new和delete运算符号,使每个Page对象固定大小 */…
0.简介: OC方法不同于C语言函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 至于其他理论上的东西不必讲太多,编程讲的就是实用性,只记录一下各种使用场景. 使用运行时:(1)导入<objc/message.h> (2)Build Setting -> 搜索msg -> 设置属性为No(取消消息机制的检查) 一般见人写runtime第一个必讲消息机制,发消息是怎么回事 比如:新建一个dog类,头文件定义三…
获取属性objc_property_t * propertys = class_copyPropertyList(clazz, &outCount); 获取属性名NSString * key = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; 获取属性的描述NSString * attributesString = [NSString stringWithCString:…
Associated Objects: @interface NSObject (AssociatedObject) @property (nonatomic, strong) id associatedObject; @end @implementation NSObject (AssociatedObject) @dynamic associatedObject; - (void)setAssociatedObject:(id)object { objc_setAssociatedObjec…
简单的讲,构造函数就是在创建一个对象的时候起到初始化的作用,对这个对象里的一些成员变量进行初始化,析构函数就是在对象被删除进行一些清理工作,也就是专门的扫尾工作,下面用代码来进行具体说明. 一.构造函数 在OC中凡是已init开头的函数我们都称之为构造函数,在声明构造函数的时候,不带参数的一般直接声明为“-(id)init”,带参数的一般声明为“-(id)initWith...”. 1 @interface Person:NSObject{ 2 @private 3 int age; 4 NSS…
1) 当向某个对象发送消息时,先从cache(cache_t)中查找方法对象(method_t),如果找到则进行回调:否则通过查找对象的类(元类)定义中方法列表,一直追溯到NSObject, 如果找到则回调,如果没有找到则调用 resolveInstanceMethod: / resolveClassMethod: 返回一个BOOL 值,可以覆盖此方法动态添加方法,如果没有则调用 forwardingTargetForSelector: 尝试返回一个实现了此方法的对象,如果返回空,则尝试调用完整…
atomic修饰的是变量/方法,对于可变对象的指针变量是安全的,内部实现加了锁,但是对可变对象本身没什么影响,不安全还是不安全.另外atomic仅仅对编译器生产的getter.setter有效,如果自定义了getter.setter则还需要自己加锁.可以使用OSAtomicXXX函数来进行正数操作或者GCC的buildin函数来进行原子操作. 如果没有实现自定义的getter / setter,实际上iOS 调用了 objc_getProperty_non_gc / reallySetPrope…
1.OC 运行期常用对象结构体 基本的结构体定义 typedef objc_class Class; /* 类 */ typedef objc_object *id; /* 各种类型,只要第一个字段为isa_t 即可,兼容Class */ 1.2) isa_t 联合体定义 union isa_t  { Class cls;   uintptr_t bits; /* unsigned long 无符号长整形,8个字节 */ #if SUPPORT_NONPOINTER_ISA # if __arm…
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz 1. Flink运行时架构 1.1Flink架构 Flink 运行时架构主要包含几个部分:Client.JobManager(master节点)和TaskManger(slave节点). Client:Flink 作业在哪台机器上面提交,那么当前机器称之为Client.用户开发的Program 代码,它会构建…
该文是 objc_msgSend消息传递学习笔记 – 对象方法消息传递流程 的基础上继续探究源码,请先阅读上文. 消息转发机制(message forwarding) Objective-C 在调用对象方法的时候,是通过消息传递机制来查询且执行方法.如果想令该类能够理解并执行方法,必须以程序代码实现出对应方法.但是,在编译期间向类发送了无法解读的消息并不会报错,因为在 runtime 时期可以继续向类添加方法,所以编译器在编译时还无法确认类中是否已经实现了消息方法. 当对象接受到无法解读的消息后…