3.OC语言特性相关

Category(分类)

  • 声明私有方法
  • 分解体积庞大的类文件
  • 把Framework的私有方法公开

特点

  • 运行时决议
  • 可以为系统类添加分类

可添加那些内容

  • 实例方法
  • 类方法
  • 协议
  • 属性(只生成setter和getter的声明,不会生成setter和getter的实现以及成员变量)
  • 可通过关联对象添加成员变量
struct objc_category {
    char * _Nonnull category_name                            OBJC2_UNAVAILABLE;  //分类名
    char * _Nonnull class_name                               OBJC2_UNAVAILABLE; //类名
    struct objc_method_list * _Nullable instance_methods     OBJC2_UNAVAILABLE; //实例方法
    struct objc_method_list * _Nullable class_methods        OBJC2_UNAVAILABLE;  //类名
    struct objc_protocol_list * _Nullable protocols          OBJC2_UNAVAILABLE; //协议
}  

关联对象

//关联对象  object:被关联的对象; key:关联的key,要求唯一;  value:关联的对象
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
//获取关联的对象
id objc_getAssociatedObject(id object, const void *key)
//移除关联的对象
void objc_removeAssociatedObjects(id object)

Extension(扩展)

一般用扩展做什么

  • 声明私有属性
  • 声明私有方法
  • 声明私有成员变量

特点

  • 编译时决议
  • 只以声明的形式存在,多数情况下寄生于宿主类的.m中
  • 不能为系统类添加扩展

通知

  • 是使用观察者模式来实现的用于跨层传递消息的机制
  • 传递方式为一对多

代理

  • 一对一

KVO

  • KVO是OC对观察者设计模式的又一实现
  • Apple使用了isa混写(isa-swizzling)来实现KVO
  • 使用setter方法改变值kvo才会生效
  • 使用setValue:forKey:改变值kvo会生效
  • 成员变量直接修改需手动添加kvo(willChangeValueForKey 和 didChangeValueForKey)才会生效

属性关键字

  • 读写权限
    readonly
    readwrite
  • 原子性
    atomic:线程安全
    nonatomic
  • 引用计数
    return/strong
    assign/unsafe_unretained

assign和week有什么区别

  • assign
    修饰基本数据类型,如int,bool等
    修饰对象类型,不改变引用计数
    会产出悬垂指针。
  • weak
    不改变被修饰对象的引用计数
    所指对象在被释放之后会自动置为nil

copy

  • 可变对象的copy和mutableCopy都是深拷贝
  • 不可变对象的copy是浅拷贝 mutableCopy都是深拷贝
  • copy方法返回的都是不可变对象
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 5,552评论 0 1
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 7,397评论 0 20
  • 一、分类(Category) 问题1:你用分类都做了哪些事情? 声明私有方法 分解体积庞大的类文件 把Framew...
    huoshe2019阅读 4,117评论 0 2
  • Objective-C语言特性 分类 分类的作用:声明私有方法,分解体积大的类文件,把framework的私有方法...
    jay_丶阅读 1,342评论 0 0
  • 阅读1小时,总计527小时,第494日。 阅读《国王的两个身体》至8% 1960 年代以来,公民哲学及其子嗣剑桥学...
    龙套哥萨克海龙阅读 1,360评论 0 0

友情链接更多精彩内容