美文网首页
11期_iOS-分类探究

11期_iOS-分类探究

作者: 萧修 | 来源:发表于2023-08-11 01:00 被阅读0次

分类概念

分类的特点:

  • 编译后的Category类,是没有将方法添加到宿主类的,是通过程序运行时依赖runtime动态添加到宿主类
  • 分类是给原有类添加方法,在分类的结构体指针中,是没有属性列表,只有方法列表
  • 分类可以写property,但是不会生成setter方法,也不会生成私有变量,会编译通过,引用报错
  • 分类中方法和原类方法冲突,会优先调用分类方法(分类的方法是最好添加到方法列表中)
  • 多个分类方法,由编译顺序决定,谁最后编译执行谁

多个分类编译顺序(队列方式):Build Phases -> Compil Sources 列表中下面的Category文件比其上边的Category文件先加载运行
分类中的instance方法合并到class对象中,类方法合并到meta-class对象中
属性、instance方法、协议合并到类对象struct class_rw_t中
通过attachCategories函数将合并后的分类数据(方法、属性、协议),插入到类原来数据的前面

initialize和load区别
load是启动加载时刻runtime调用,
1、调用顺序:load是函数地址调用,initialize是objc_msgsend调用;都是系统主动调用
2、分类加载load方法,原类也会加载,先编译优先加载(只加载一次)。而initialize子类调用 再调用父类,父类会调用多次

分类的底层结构

struct category_t{
const char *name;//分类名称
classref_t cls;//所属原类
struct method_list_t *instanceMethods;//实例方法列表
struct method_list_t *classMethods;//类方法列表
struct property_list_t *protocols;//协议方法列表
struct property_list_t *instanceProperties;//实例属性列表
    
}

相关文章

  • iOS-性能优化深入探究

    iOS-性能优化深入探究 iOS-性能优化深入探究

  • 2-1 分类 类后面加括号

    1.什么是分类 = 类别。通过runtime将方法添加进 类里面 iOS-分类(Category)[https:...

  • 图标制作总结

    图标分类 系统图标- iOS- Material Design- 区别 展示性图标- 线型- 实心- 卡通- 写实...

  • iOS-isa指向图&类结构(上)

    一.isa & superclass的指向探究 靓仔们,我们在main.m中添加如下代码: 在iOS-对象的本质,...

  • iOS-探究Runtime

    前言:本文探究iOS中Runtime相关内容,如有错误请留言指正。 Objective-C是一门动态性比较强的编程...

  • iOS-分类的加载

    前言   iOS的一道经典面试题:分类是什么?是否可以给分类添加成员变量?如果可以,怎么添加?下面我们就来探究探究...

  • iOS-匿名分类

    前言   iOS的一道经典面试题:分类是什么?是否可以给分类添加成员变量?如果可以,怎么添加?下面我们就来探究探究...

  • YYKit 源码探究

    1. YYKit源码探究(一) —— 基本概览2. YYKit源码探究(二) —— NSString分类之Hash...

  • iOS-线程安全探究

    为什么CFRunLoopRef是线程安全的,而基于此的NSRunLoop却不是线程安全的呢? 线程安全时多线程领域...

  • iOS-分类(Category)

    Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指的Category。Cat...

网友评论

      本文标题:11期_iOS-分类探究

      本文链接:https://www.haomeiwen.com/subject/crimpdtx.html