博客> 10、在既有类中使用关联对象存放自定义数据
10、在既有类中使用关联对象存放自定义数据
2019-11-16 07:37 评论:0 阅读:767 sunqiaoqiao
ios

其实就是关联对象。

Category 可以给你自己的类,系统的类,添加一些额外的方法。不是继承。可以重载原方法,但是不建议这样做,会覆盖掉原方法。只要不调用,就不用非得实现。不能添加属性。那么给原来既有的类添加属性就用到了关联对象。

说cateGory不能增加属性,我也信了,但是有这么一个问题,也不知道我从哪个大神那里拷贝出来的代码UIView+Category 关于frame的 category 属性竟然可以用,我不知道为什么,先在这里做下备注

头文件里面

import

@interface UIView (Category)

  • (void)rx:(float)x;
  • (void)ry:(float)y;
  • (void)rwdith:(float)wdith;
  • (void)rhigth:(float)higth;

@property (nonatomic) CGFloat left; ///< Shortcut xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed>。

先说setter方法,使用到了objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)。有四个参数

第一个<#id object#>是要添加属性的对象,这里就是自己self

第二个<#const void *key#>关键字选择器,就是通过这个关键字的方法找到对象的哪个属,一般用@selector(属性名)

第三个<#id value#>值,就是给属性设置你想设置的值

第四个<#objc_AssociationPolicy policy#>策略,是一个枚举类型,默认使用第一个

再说getter方法,objc_getAssociatedObject(<#id object#>, <#const void *key#>)。有两个参数

第一个<#id object#>是要添加属性的对象,这里就是自己self

第二个<#const void *key#>关键字选择器,就是通过这个关键字的方法找到对象的哪个属,一般用@selector(属性名)

注意,第二个关键字可传 _cmd,代表方法名本身。每一个方法内都有一个_cmd,表示方法自身。

收藏
0
sina weixin mail 回到顶部