利用运行时关联(runtime)给分类(Category)中的属性存值.
来源:互联网 发布:下载和目软件 编辑:程序博客网 时间:2024/06/06 01:29
分类的作用:它可以在不改变原来的类的内容的基础上,为类增加一些方法。
分类使用注意:
(1)在分类中可以增加方法
(2)在分类中不能增加成员变量
(3)在分类中可以添加属性,但是属性不可以保存值,因为分类中没有成员
变量,在分类中不会生成 _变量,不会实现getter和setter方法,需要手动的实现getter和setter方法。
(4)分类中可以重新实现原来类的方法,但是会覆盖掉原来的方法,导致原来
的方法无法使用
(5)方法调用优先级:分类-->原来的类-->父类,若包含有多个分类,则最后
参与编译的分类优先。
为分类添加属性时,属性不能保存值,我们在setter方法中无法把传入的变量
保存起来,那么在调用getter方法时就无法返回传入的变量。
我们可以利用runtime来,解决这个问题。
运行时关联对象:
1.在程序运行的时候,动态的给对象添加属性
objc_setAssociatedObject(<#id object#>, <#const void *key#>, <#id value#>, <#objc_AssociationPolicy policy#>)
2.在程序运行的时候,,动态获取对象的属性
objc_getAssociatedObject(<#id object#>, <#const void *key#>)
3.移除关联的对象
objc_removeAssociatedObjects(<#id object#>)
运行时关联是指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分。
使用关联时,我们可以不用修改类的定义而为其对象增加存储空间。关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可,关联可以保证被关联的对象在关联对象的整个生命周期都是可用的。(在自动垃圾回收环境下也不会导致资源不可回收)
#import <UIKit/UIKit.h>
@interface UIImageView (url)
@property (nonatomic,copy)NSString *lastUrl;
@end
#import "UIImageView+url.h"
#import <objc/runtime.h>
@implementation UIImageView (url)
- (void)setLastUrl:(NSString *)lastUrl{
/*
1. 需要关联的对象 self
2. 需要关联的对象的属性的键值(key)
3.需要关联的对象的属性
4.需要关联的对象的属性的修饰符
*/
//动态的给对象添加属性
objc_setAssociatedObject(self,"key", lastUrl,OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (NSString *)lastUrl{
/*
1. 需要关联的对象 self
2. 需要关联的对象的属性的键值(key)
*/
//动态的获取对象的属性
return objc_getAssociatedObject(self,"key");
}
-(void)dealloc{
//移除关联对象
objc_removeAssociatedObjects(self);
}
@end
#import "ViewController.h"
#import "UIImageView+url.h"
@interfaceViewController()
@property(nonatomic,strong)UIImageView* imageView;
@end
@implementation ViewController
- (UIImageView *)imageView{
if(_imageView==nil){
_imageView = [[UIImageViewalloc]init];
}
return _imageView;
}
- (void)viewDidLoad {
[superviewDidLoad];
self.imageView.lastUrl =@"hello";
NSLog(@"%@",self.imageView.lastUrl);
}
@end
- 利用运行时关联(runtime)给分类(Category)中的属性存值.
- 如何利用运行时给系统分类添加一个属性?
- iOS-利用运行时给分类添加属性
- iOS利用运行时给分类添加属性
- iOS 运行时runtime应用之二--在category中使用运行时API给类添加属性
- IOS通过runtime给category添加属性
- 利用Runtime为Category添加属性
- 给分类(Category)添加属性
- 给分类(Category)添加属性
- 给分类(Category)添加属性
- 给分类(Category)添加属性
- 给分类(Category)添加自定义属性
- 给分类(Category)添加属性
- iOS运行时-使用Runtime向Category中添加属性以及运行时介绍
- RunTime应用--动态给分类添加属性
- ios 通过Category给系统类添加属性(关联值)
- Runtime(三)利用运行时来为类别添加属性
- 利用runtime给类别添加属性
- 有关Doxygen及Graphviz代码分析软件
- gitlab,gerrit,readmin,wordpress,jenkins
- LeetCode 028 Implement strStr()
- Windows下动态库和静态库的浅要对比分析
- email驗證
- 利用运行时关联(runtime)给分类(Category)中的属性存值.
- 网络爬虫入门
- 使用Html5异步上传文件,支持跨域,带有上传进度条
- 限制图片显示的尺寸
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块
- <LeetCode OJ> 9. Palindrome Number
- 虚拟化简单练习环境搭建(二)
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- [bzoj 2563] 阿狸和桃子的游戏