自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Runtime -- isa

struct objc_object { isa_t isa;}union isa_t { isa_t() { } isa_t(uintptr_t value) : bits(value) { } Class cls; uintptr_t bits;#if defined(ISA_BITFIELD) struct { IS...

2020-03-14 20:29:48 210

原创 Block的循环引用

__weak、__unsafe_unretained方式解决循环引用示意图__block方式解决循环引用示意图代码实例typedef void (^TBBlock) (void);@interface TBPerson : NSObject@property (nonatomic, copy) TBBlock block;@end@implementation TBPe...

2020-03-14 09:35:12 161

原创 Block之__block

__block 可以用来解决block内部无法修改auto变量值的问题__blcok不能修饰全局变量、静态变量(static)编译器会将__block变量包装成一个对象代码示例============================== 原始代码 ==============================@interface TBPerson : NSObject@proper...

2020-03-12 20:15:48 203

原创 Block的类型

block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型 所有的block都是继承自NSBlock, NSBlock继承自NSObject 所以block本质上就是一个OC对象 __NSGlobalBlock__ : __NSGlobalBlock : NSBlock : NSObject __NSStackBlock__ : __N...

2020-03-11 20:15:32 498

原创 关联对象

在默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但是可以通过关联对象间接实现在分类中添加成员变量的效果关联对象API:/* 获取关联对象 id object: 关联的对象 const void *key: 标识*/ id objc_getAssociatedObject(id object, const void *key) { return _objec...

2020-03-11 19:02:57 533

原创 Block的底层数据结构和变量捕获

block的本质上也是一个OC对象,它内部也有一个isa指针block是封装了函数调用以及函数调用环境的OC对象void (^block) (void) = ^{ NSLog(@"Hello, World!");};block();============================== 使用clang转换为C/C++猜测底层实现 ====================...

2020-03-10 22:39:14 169

原创 initialize方法

1、+ initialize方法会在类第一次接受到消息时调用2、+initialize方法是通过objc_msgSend函数(消息发送机制)调用2.1、如果子类没有实现+initialize,会调用父类的+initialize(所以父类的+initialize可能会被调用多次)2.2、如果分类实现了+initialize,会覆盖类本身的+initialize的调用调用顺序1、先调用父类的...

2020-03-07 21:15:19 3320

原创 load方法

1、+load方法会在Runtime加载类、分类时调用2、+load方法是根据方法地址直接调用,并不是经过objc_msgSend函数(消息发送机制)调用每个类、分类的+load方法,在程序运行过程中只调用一次调用顺序1、先调用类的+load方法1.1、按照编译先后顺序调用(先编译,先调用)1.2、调用子类的+load方法之前会先调用父类的+load方法2、再调用分类的+load方法...

2020-03-06 23:28:41 1617

原创 Cateogry

在程序运行的过程中,通过Runtime动态将分类的方法合并到类对象、元类对象中面试题总结:一、Category的实现原理二、Category和Class Extension的区别是什么?三、Category中有的load方法吗?load方法是什么时候调用的?load方法能继承吗?四、load、initialize方法的区别是什么?它们在Category中的调用顺序?以及出现继承时它们...

2020-03-06 01:29:41 110

原创 KVC

KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性KVC主要用到的方法// 赋值方法- (void)setValue:(id)value forKey:(NSString *)key;- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;// 取值方法- (id)valueFo...

2020-03-04 23:47:07 111

原创 KVO

KVO的全称是Key-Value Observing,俗称“键值监听”,可用于监听某个对象属性值的变化@interface TBPerson : NSObject@property (nonatomic, strong) NSString *name;@end#import "ViewController.h"#import "TBPerson.h"@interface Vi...

2020-03-03 23:21:34 128

原创 LLDB部分指令

LLDB部分指令print、p :打印po :打印对象读取内存memory read 内存地址 (memory read/数量格式字节数 内存地址)(可以简写为) x/数量格式字节数 内存地址示例:x/3xw 0x10010格式说明x :16进制; f :浮点; d :10进制字节数说明b :byte 1个字节; h :half word 2字节; w :word 4字节; g...

2020-03-02 19:18:34 345

原创 isa指针

对象的isa指针指向哪里?OC的类信息存放在哪里?

2020-03-02 19:16:18 270 1

原创 OC对象的分类

instance对象(实例对象)通过类alloc出来的对象,每次调用alloc都会生成新的instance对象/* obj1、obj2是NSObject的instance对象(实例对象) 它们是不同的2个对象,分别占用着2块不同的内存*/NSObject *obj1 = [[NSObject alloc] init];NSObject *obj2 = [[NSObject alloc...

2020-03-01 21:02:41 256

原创 OC对象的本质

Objective-C本质Objective-C -----> C/C++ -----> 汇编语言 -----> 机器语言Objective-C的面向对象都是基于C/C++的数据结构实现的(结构体)将OC代码转换成C/C++代码clang -rewrite-objc OC源文件 -0 输出的CPP文件xcrun -sdk iphoneos clang -arch arm...

2020-02-29 22:59:15 209

原创 抽象工厂模式

抽象工厂模式一、角色1、抽象工厂定义并实现选择不同工厂的方法定义根据不同的条件生成不同的具体产品的方法2、具体工厂继承自抽象工厂,实现生成不同的具体产品的逻辑判断(一个具体工厂对应一个产品族)3、抽象产品定义具体产品所需的属性和方法4、具体产品继承自抽象产品,完成产品的具体实现二、优缺点1、优点将一系列相关或者相互依赖的产品族放到一起去创建,分离调用和创建逻辑易于改变产...

2020-02-28 21:05:25 156

原创 工厂方法模式

工厂模式一、角色1、抽象工厂提供在系统中创建具体产品(实例)的具体工厂统一实现的接口2、具体工厂受客户端调用来创建具体产品(实例),与具体产品进行绑定3、抽象产品具体产品的父类,提供具体产品(实例)需要的属性和方法4、具体产品实现抽象产品的方法,每个具体工厂所创建的就是对应的具体产品的实例二、优缺点1、优点符合面向对象设计的单一职责原则,有利于程序的拓展抽象类、具体类之间...

2020-02-27 16:35:52 116

原创 简单工厂模式

简单工厂模式一、角色:1、具体工厂具有统一的接口,根据客户端请求。创建并返回相应具体的产品实例2、抽象产品具体产品的父类,定义具体产品所需要的属性和方法。子类通过继承来获取这些属性和方法(当整个系统中只有唯一的产品时,可以省略抽象产品。将具体工厂和具体产品进行合并)3、具体产品继承自抽象产品,具体工厂类创建的对象就是具体产品的实例二、优缺点1、优点核心是具体工厂类,包含有必要的...

2020-02-26 12:03:54 110

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除