2019独角兽企业重金招聘Python工程师标准>>>

比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了。

iOS扩展属性:category可以扩展类的方法,但是不能扩张类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用<obj/runtime.h>,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects.这几个方法的生命如下:

示例代码如下:

1、先创建一个person类

#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, copy) NSString *name;@end#import "Person.h"@implementation Person@end

2、新建一个分类,运用associative添加属性

#import "Person.h"
@interface Person (addproty)
@property(nonatomic, copy)NSString *addr;
@end
#import "Person+addproty.h"
#import <objc/runtime.h>
@implementation Person (addproty)
static char strAddrKey = 'a';
- (NSString *)addr
{return objc_getAssociatedObject(self, &strAddrKey);
}
- (void)setAddr:(NSString *)addr
{objc_setAssociatedObject(self, &strAddrKey, addr, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end

转载于:https://my.oschina.net/u/2472425/blog/683057

如何给iOS 分类添加 属性相关推荐

  1. iOS 分类添加属性

    1.首先在分类文件中导入头文件 #import <objc/runtime.h> 2.实现代码如下: (1).h定义文件 #import <UIKit/UIKit.h>@int ...

  2. iOS Category 添加属性实现原理 - 关联对象

    iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...

  3. iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

    前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...

  4. OC中category(分类)中添加属性

    OC中category(分类)中添加属性 因为OC中无法添加成员变量并且添加的属性不会被保存,所以需要重写get和set方法来实现属性的保存. //setter //self表示属性拥有者是当前类, ...

  5. Category为什么不能添加属性

    分类中能不能定义实例变量,为什么? 答案:不能.类的内存布局在编译时期就已经确定了,category是运行时才加载的早已经确定了内存布局所以无法添加实例变量,如果添加实例变量就会破坏category的 ...

  6. Runtime 系列 3-- 给 category 添加属性

    Associated Objects的作用 Associated Objects的作用一般有如下三种: 为系统类添加私有变量以帮助实现细节: 为系统类添加公有属性: 为 KVO 创建一个关联的观察者. ...

  7. Catagory添加属性、扩展方法

    objc_setAssociatedObject(self, &strKey, isShow, OBJC_ASSOCIATION_COPY_NONATOMIC); return objc_ge ...

  8. Android 4.0.4-在build.prop中添加属性

    Android 4.0.4-在build.prop中添加属性 2013-10-07 16:40:56|  分类: 默认分类|举报|字号 订阅 1.在*.rc文件中用setprop添加,例如在源码and ...

  9. iOS—分类、load 、initialize

    文章目录 分类 分类的结构 load方法的调用顺序 initialize load和initialize区别 分类在运行期做了什么 为什么category不能添加成员变量 分类能否添加属性 使用关联对 ...

最新文章

  1. 8种方案解决重复提交问题!
  2. python字符串endswith,Python字符串| 具有示例的endswith()方法
  3. 单臂路由与三层交换机实现VLAN通信
  4. python sorted下标_全!Python基础之原生数据类型、判断和循环、函数和文件操作合集...
  5. 你看过Xgboost原文吗?
  6. vmware安装centos6-步骤小结
  7. [JLOI2014]松鼠的新家
  8. scanf( )函数的返回值
  9. android toast居中显示_Android和iOS7的差异点!
  10. git SSH 公钥拉取代码(使用及配置)
  11. nodejs下载文件
  12. 计算机考试报名填写完资料无法提交,护考报名入口已开通,常见问题看这里~...
  13. 安全合规/法案--33--《APP违法违规收集使用个人信息自评估指南》原文及解读
  14. simulink模型动静态测试
  15. CTEX加中英文摘要
  16. python经纬度转换xy坐标公式_经纬度坐标转换为距离及角度(Python)
  17. 解决Gmail不能正常登录的问题,并推荐几个小窍门 [转]
  18. wget 整站下载
  19. DeepFlow Large displacement optical flow with deep matching
  20. 再见华为!一位嵌入式大佬的8年励志总结

热门文章

  1. canal+mysql+rocket
  2. Centos7 上安装 mysql5.7
  3. C++关键字积累——持续更新
  4. pandas 读取sqlserver_13个Pandas实用技巧,请收好
  5. java ee eclipse idea,转----从Eclipse转移到IntelliJ IDEA一点心得
  6. 织梦html地图插件,织梦dede网站地图xml生成插件(图文教程)
  7. Mysql进阶(3)——读写分离(mysql-proxy)
  8. Wamp与IIS同时在Windows7下运行解决方法
  9. 使用PHP生成和获取XML格式数据
  10. 生成打印条码_条码打印软件如何生成跳号条形码