美文网首页
主题三《Category、关联对象》

主题三《Category、关联对象》

作者: 东方奇迹 | 来源:发表于2020-08-12 09:55 被阅读0次
截屏2020-08-05 下午10.04.08.png 截屏2020-08-05 下午10.04.53.png 截屏2020-08-05 下午10.10.12.png 截屏2020-08-05 上午11.07.50.png 截屏2020-08-05 下午1.38.51.png 截屏2020-08-05 下午2.55.27.png 截屏2020-08-05 下午5.38.34.png

注意:给分类添加的属性只会生成set方法和get方法的声明,并不会生成成员变量和set方法及get方法的实现,为了让分类属性的用法和原来类里面的用法保持一致,这样写属性才有意义,所以可使用下边方法来实现:

截屏2020-08-07 上午10.06.02.png

注意:上面的方法写起来会很麻烦,还要注意加上同步锁防止多线程抢夺资源的情况,所以采用另外一种方法关联对象来实现

截屏2020-08-07 上午10.19.55.png 截屏2020-08-07 上午10.46.11.png 截屏2020-08-07 上午10.25.38.png 截屏2020-08-07 上午11.11.21.png 截屏2020-08-07 下午2.00.16.png 截屏2020-08-07 上午10.45.13.png 截屏2020-08-07 上午10.50.12.png 截屏2020-08-07 上午10.56.11.png 截屏2020-08-07 上午10.57.56.png

1、Category的实现原理(Category底层结构及Category的加载处理过程)?

2、Category和Class Extension的区别?

3、load、initialize方法的区别(调用方式、调用时机、顺序)?


1.调用方式
1> load是根据函数地址直接调用
2> initialize是通过objc_msgSend调用

2.调用时刻
1> load是runtime加载类、分类的时候调用(只会调用1次)
2> initialize是类第一次接收到消息的时候调用,每一个类只会initialize一次(父类的initialize方法可能会被调用多次)

3.load、initialize的调用顺序?
(1).load
1> 先调用类的load
a) 先编译的类,优先调用load
b) 调用子类的load之前,会先调用父类的load

2> 再调用分类的load
a) 先编译的分类,优先调用load

(2).initialize
1> 先初始化父类
2> 再初始化子类(可能最终调用的是父类的initialize方法)
3> 如果分类实现了initialize方法就会覆盖类本身的initialize方法调用

4、通过关联对象给分类添加属性?

- (void)setName:(NSString *)name
{
    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name
{
    // 隐式参数
    // _cmd == @selector(name)
    return objc_getAssociatedObject(self, _cmd);
}

相关文章

  • 主题三《Category、关联对象》

    注意:给分类添加的属性只会生成set方法和get方法的声明,并不会生成成员变量和set方法及get方法的实现,为了...

  • Category关联对象

    一、分类中添加成员变量Category中添加成员变量.png 所以Category中是不能添加成员变量 二、Cat...

  • Category关联对象

    OC中的分类严格来说,是不能添加对象;但是我们可以通过OC运行是的机制,动态为分类添加属性 一、类中的属性 当在类...

  • 关联对象

    关联对象 关联对象一般用来配合 Category 使用,在 Category 中声明属性时编译器只会自动生成 Ge...

  • 关于分类(Category)关联对象的一些了解

    本文是关于Category关联对象的一些理解化,以及部分使用建议。仅适用于新手玩家(对Category关联对象停留...

  • Category使用关联对象生成属性的原理

    Category关联对象: main.m文件: NSString+Category.h文件: NSString+C...

  • Associated Object(关联对象)使用及原理

    一 基本使用 二 底层原理 三 应用场景 分类(category)与关联对象(Associated Object)...

  • Objective-C--关联对象(AssociateObjec

    关联对象的用途 在Category中为已经注册的类增加存储字段,模拟实例变量。 关联对象存储原理 所有的关联对象都...

  • Category-关联对象

    分类添加属性 Category能否添加成员变量?如果可以,如何给Category添加成员变量?不能直接给Categ...

  • Category &associate 关联对象

    手动为Category生成一个成员变量 默认情况下,因为分类底层架构的限制,不能添加到成员变量到分类中,但是可以通...

网友评论

      本文标题:主题三《Category、关联对象》

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