iOS底层学习-day-12

前言-OC-runtime篇

我是一名iOS开发者, iOS底层 菜鸟的进阶之路30天。

位运算

typedef enum {
//    MJOptionsNone = 0,    // 0b0000
    MJOptionsOne = 1<<0,   // 0b0001
    MJOptionsTwo = 1<<1,   // 0b0010
    MJOptionsThree = 1<<2, // 0b0100
    MJOptionsFour = 1<<3   // 0b1000
} MJOptions;


/*
 0b0001
 0b0010
|0b1000
 ------
 0b1011
&0b0100
-------
 0b0000
 */
- (void)setOptions:(MJOptions)options {
    if (options & MJOptionsOne) {
        NSLog(@"包含了MJOptionsOne");
    }
    
    if (options & MJOptionsTwo) {
        NSLog(@"包含了MJOptionsTwo");
    }
    
    if (options & MJOptionsThree) {
        NSLog(@"包含了MJOptionsThree");
    }
    
    if (options & MJOptionsFour) {
        NSLog(@"包含了MJOptionsFour");
    }
}

isa-类结构的窥探

在这里插入图片描述

  • nonpointer
    • 0,代表普通的指针,存储着Class、Meta-Class对象的内存地址
    • 1,代表优化过,使用位域存储更多的信息
  • has_assoc
    • 是否有设置过关联对象,如果没有,释放时会更快
  • has_cxx_dtor//有些类会自动插入析构函数
    • 是否有C++的析构函数(.cxx_destruct),如果没有,释放时会更快
  • shiftcls
    • 存储着Class、Meta-Class对象的内存地址信息
  • magic
    • 用于在调试时分辨对象是否未完成初始化
  • weakly_referenced
    • 是否有被弱引用指向过,如果没有,释放时会更快
  • deallocating
    • 对象是否正在释放
  • extra_rc
    • 里面存储的值是引用计数器减1
  • has_sidetable_rc
    • 引用计数器是否过大无法存储在isa中
    • 如果为1,那么引用计数会存储在一个叫SideTable的类的属性中

class_ro_t 和 class_rw_t

  • 一开始类的所有信息在class_ro_t,然后才有class_rw_t
    • class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容
    • class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容

cache_t cache - 方法缓存

  • cache_t cache
    • 方法缓存,提高方法查找技术,是一种散列表缓存,用空间换时间的
      在这里插入图片描述

type encoding

  • SEL类型

    • SEL代表方法函数名,一般叫做选择器,底层结构跟char *类似
    • 可以通过@selector()和sel_registerName()获得
    • 可以通过sel_getName()和NSStringFromSelector()转成字符串
    • 不同类中相同名字的方法,所对应的方法选择器是相同的
  • 为什么函数会是 “v 16 @ 0 :8”

  • 验证方法 - 验证 v 16 @ 0 :8

NSLog(@"%s", @encode(@selector(test)));来验证
  • 举例
// "i 24  @(self) 0 :(_cmd) 8  i 16    f 20”		//24:所有参数的数
// 0 id   		   8 SEL   	  16 int   20 float  == 24
- (int)test:(int)age height:(float)height;
发布了31 篇原创文章 · 获赞 0 · 访问量 956

猜你喜欢

转载自blog.csdn.net/weixin_41732253/article/details/103950387