博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分类(Category) 中添加属性
阅读量:4086 次
发布时间:2019-05-25

本文共 937 字,大约阅读时间需要 3 分钟。

在苹果的规定中分类(Category)中是不可以添加自定义属性的,

why?

  • 1.分类为什么不能拓展成员变量?
    • 使用alloc初始化的时候,一些系统自定义的类型都有固定的大小,因为他们都有系统定义的固有的成员变量,init就是为这些成员变量赋值
    • 如果,我们在分类中拓展成员变量,那么使用alloc开辟空间的时候,就无法检测到自定义的成员变量,所以使用init开辟空间的时候就无法准确的开辟空间,所以苹果的设计中不允许在分类中扩展成员变量

凡事都有个例外………

通过运行时机制可以实现在分类中添加自定义属性

NSObject+LC.h@interface NSObject (LC)@property (nonatomic,strong) id associatedObject;@end
NSObject+LC.m#import 
/* 1.运行时,是开发OC的;OC是在运行时的C语言的API的基础之上的封装 2.可以动态的给对象增加属性 : 字典转模型框架 3.可以动态的交换方法的地址 : 可以交换自定义的方法和系统的方法的地址 4.可以动态的获取对象的属性 : 字典转模型框架 5.可以动态的给某个分类关联上它的属性 6.可以动态的给对象的私有的成员变量赋值 7.只在开发大型框架时使用的,平时开发用不到的 */@implementation NSObject (LC)@dynamic LC; /* 参数1 : 关联的对象 参数2 : 关联的key 参数3 : 关联的value 参数4 : 关联的value的存储策略 */-(void)setAssociatedObject: (id) object {objc_setAssociatedObject ( self, @selector (associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC );}-(id)associatedObject{return objc_getAssociatedObject( self, @selector ( associatedObject ) );

转载地址:http://xfkii.baihongyu.com/

你可能感兴趣的文章
线性数据结构学习笔记
查看>>
数据结构与算法9-递归
查看>>
数据结构与算法10-冒泡排序、插入排序、选择排序
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
计算机组成原理 | 冯·诺依曼体系结构:计算机组成的金字塔 | 极客时间
查看>>
嵌入式系统 - 同步、互斥与通信(下)
查看>>
优先级位图算法
查看>>
离群点(孤立点)检测
查看>>
Python - 用 turtle 绘制圆形
查看>>
Mayavi 入门
查看>>
Python - 简单的数据类型
查看>>
MATLAB 基础知识
查看>>
机器学习基石 - The Learning Problem
查看>>
机器学习基石 - Types of Learning
查看>>
deeplearning.ai - 深度卷积网络:实例探究
查看>>
Deeplearning.ai - 浅层神经网络
查看>>
deeplearning.ai - 深层神经网络(Deep Neural Networks)
查看>>
机器学习基石 - Training versus Testing
查看>>
机器学习基石 - Theory of Generalization
查看>>