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

OC语言特性相关

作者: X勒个F | 来源:发表于2019-05-09 02:40 被阅读0次

1. 分类-category

  • 如何使用

    1. 声明私有方法
    2. 分解体积庞大的类文件
    3. 把Framework的私有方法公开等
  • 分类的特点(与扩展的区别)

    1. 运行时决议
    2. 可以为系统类添加分类
    3. 可声明,可实现
  • 分类可以添加什么

    1. 实例方法
    2. 类方法
    3. 协议
    4. 属性(只生成get、set方法,不生成实例变量),可添加关联对象
    • 分类添加的方法可以“覆盖”原类的方法
    • 同名分类方法最后被编译的分类最优先生效
    • 命名相同的分类会引起编译错误
  • 分类成员结构


    分类的成员结构
  • 分类的加载调用栈


    QQ20190509-012729@2x

2. 关联对象


id objc_getAssociatedObject(id object, const void *key)


void objc_setAssociatedObject(id object, const void *key, id value, object_AssociationPolicy policy)


void objc_removeAssociatedObject(id object)

关联对象由AssociationsManger管理并在AssociationsHashMap存储。所有对象的关联内容都在同一个全局容器中。

关联对象的本质 QQ20190509-015117@2x

3. 扩展-Extension

  • 使用

    1. 声明私有属性
    2. 声明私有方法
    3. 声明私有成员变量
    • 编译时决议
    • 只以声明的形式存在,多数情况下寄生于宿主类的.m中
    • 不能为系统类添加扩展

4. 代理-Delegate

  • 是一种软件设计模式

    • iOS中以@protocol的形式体现
    • 传递方式一对一
    图解

5. 通知-NSNotification

  • 设计模式 —— 观察者模式
    • 使用观察者模式来实现的用于跨层传递消息的机制
    • 传递方式一对多
通知
  • 实现机制

    通知原理

6. KVO

  • 观察者模式

    • 是Key-value observing的缩写
    • 是OC对观察者模式的又一实现
    • 使用了isa混写(isa-swizzling)来实现
    kvo图解
    • 使用setter方法改变值KVO才会生效
    • 使用setVaule:forKey:改变值KVO才会生效
    • 成员变量直接修改不会生效,可手动触发

7. KVC

  • Key-value coding的缩写

    • Apple 提供的键值编码技术
      • (id)valueForKey:(NSString *)key
      • (id)setValue:(id)value forKey:(NSString *)key
    • 破坏了面向对象编程思想
    访问

    访问顺序

    1. _key
    2. _isKey
    3. key
    4. isKey

    [图片上传失败...(image-bf242a-1557340787646)]

8. 属性关键字

  • 读写权限
    • readonly
    • readwrite(默认)
  • 原子性
    • atomic(默认,保证赋值和获取是线程安全的,如操作并不是线程安全的)
    • nonatomic
  • 引用计数
    • retain/strong
    • assign/unsafe_unretained
      • assign
        • 既可修饰基本数据类型,又可修饰对象
        • 修饰基本数据类型,如int、 BOOL
        • 修饰对象类型时,不改变其引用计数
        • 会产生悬垂指针
    • weak
      • 只能修饰对象
      • 不改变被修饰对象的引用计数
      • 所指对象在被释放后会自动置为nil
    • copy
      • 浅拷贝
        • 增加被拷贝对象的引用计数
        • 没有新的内存分配
      • 深拷贝
        • 产生新的内存分配
        • 不会增加被拷贝对象的引用计数

9. MRC下重写retain修饰变量的setter方法


@property (nonatomic, retain) id obj:

- (void)setObj:(id)obj {
    if (_obj != obj) { // 防止传入同一个变量被释放,后面访问出错
        [_obj release];
        _obj = [obj retain];
    }
}

相关文章

  • iOS面试

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

  • OC语言特性相关

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

  • 我理解的runtime

    OC Runtime 对OC的理解与特性 OC是一门面向对象语言,既有静态语言的特性(C++),又有动态语言的特性...

  • OC中语言特性相关

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

  • 面试题之 OC

    OC语言的特性? ①OC 语言是 C 语言的一个超集,在 C 的基础上添加了面向对象的特性;②OC 语言与 Jav...

  • 面试总结

    OC的理解与特性 . OC是一门面向对象的语言,三大特性:封装 继承 多态。静态语言特性(C++),动态语言的效率...

  • 第一章:熟悉OC

    OC语言特性:-1. OC是在C的语言基础上添加了面向对象特性。 -2. OC与C++,JAVA等面向对象的语言类...

  • ios基础知识MS2

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 知识点总结1

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

  • 笔记《知识梳理》

    OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...

网友评论

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

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