美文网首页
3.OC语言特性相关

3.OC语言特性相关

作者: Glenn_h | 来源:发表于2020-01-14 11:56 被阅读0次

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方法返回的都是不可变对象

相关文章

  • 3.OC语言特性相关

    Category(分类) 声明私有方法 分解体积庞大的类文件 把Framework的私有方法公开 特点 运行时决议...

  • iOS面试

    目录 UI视图相关 存储相关 OC 语言特性相关 Runtime相关 内存管理相关 Block相关 多线程相关 R...

  • 关于 JavaScript 数字的那些事

    本文总结 JavaScript 语言中和数字相关的语言特性、缺陷与陷阱及使用技巧。相关基础内容请参考语言规范,本文...

  • OC语言特性相关

    1. 分类-category 如何使用声明私有方法分解体积庞大的类文件把Framework的私有方法公开等 分类的...

  • Python相关题-语言特性

    语言特性 1. 谈谈对Python和其他语言的区别 答:Python是一门语法简洁优美, 功能强大无比, 应用领域...

  • jdk6新特性

    要点 重要的特性:注解相关、脚本语言支持;其他的特性知道即可。 Common Annotations 1.0 ja...

  • Android 学习纲要

    A、JAVA 语言 高级语言特性 B、JAVA GC 虚拟机相关 C、Android UI 元素和布局 以及 An...

  • OC中语言特性相关

    1. 分类 你用分类都做了哪些事? 声明私有方法 分解体积庞大的文件 把framework的私有方法公开 特点 运...

  • Object-C语言相关特性

    接下来主要讲一下OC语言的相关特性分别从以下几个方面进行讲解: 分类 扩展 关联对象 扩展 代理 通知 KVO K...

  • Flutter Dart语法学习

    开发FlutterApp之前我们肯定要先了解Dart这门语言及语言的特性、语法等。最近看了大量的Dart语言相关内...

网友评论

      本文标题:3.OC语言特性相关

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