• runtime关联属性示例


    前言

    在开发中经常需要给已有的类添加方法和属性,但是Objective-C是不允许给已有类通过分类添加属性的,因为类分类是不会自动生成成员变量的。但是,我们可以通过运行时机制就可以做到了。

    本篇文章适合新手阅读,手把手教你如何在项目中使用关联属性!

    API介绍

    我们先看看Runtime提供的关联API,只有这三个API,使用也是非常简单的:

    实际上,我们几乎不会使用到objc_removeAssociatedObjects函数,这个函数的功能是移除指定的对象上所有的关联。既然我们要添加关联属性,几乎不会存在需要手动取消关联的场合。

    设置关联值(Setter)

    对于设置关联,我们需要使用下面的API关联起来:

    参数说明:

    • object:与谁关联,通常是传self
    • key:唯一键,在获取值时通过该键获取,通常是使用static const void *来声明
    • value:关联所设置的值
    • policy:内存管理策略,比如使用copy

    获取关联值(Getter)

    如果我们要获取所关联的值,需要通过key来获取,调用如下函数:

    参数说明:

    • object:与谁关联,通常是传self,在设置关联时所指定的与哪个对象关联的那个对象
    • key:唯一键,在设置关联时所指定的键

    关联策略

    我们先看看设置关联时所指定的policy,它是一个枚举类型,看官方说明:

    我们说明一下各个值的作用:

    • OBJC_ASSOCIATION_ASSIGN:表示弱引用关联,通常是基本数据类型,如intfloat,非线程安全
    • OBJC_ASSOCIATION_RETAIN_NONATOMIC:表示强(strong)引用关联对象,非线程安全
    • OBJC_ASSOCIATION_COPY_NONATOMIC:表示关联对象copy,非线程安全
    • OBJC_ASSOCIATION_RETAIN:表示强(strong)引用关联对象,是线程安全的
    • OBJC_ASSOCIATION_COPY:表示关联对象copy,是线程安全的

    扩展属性

    我们来写一个例子,扩展UIControl添加Block版本的TouchUpInside事件。

    扩展头文件声明:

    扩展实现文件:

  • 相关阅读:
    Django入门
    外星人入侵完整版
    外星人入侵
    简单的socket通信
    购物车程序
    列表的使用&元组
    三目运算的使用&bytes类型转str类型
    hdu 2586 How far away ?
    hdu 1075 What Are You Talking About
    洛谷 P2292 [HNOI2004]L语言
  • 原文地址:https://www.cnblogs.com/yintingting/p/5568046.html
Copyright © 2020-2023  润新知