运行时应用场景
- 1.在分类中,通过关联对象,给分类动态添加属性,能够让分类解耦,适合开发框架!
- 2.动态获得一个类的属性列表,可以开发字典转模型框架,MJExtension,JSONModel...
- 3.交换方法,动态交换方法的地址,用处主要在接管系统方法。AFN网络框架中有用到。
具体使用
以创建UIImageView
的分类为例,给UIImageView
类添加一个urlStr
属性。
1、新建分类fkWebImage分类
2、分类代码
2.1 .h添加需要的属性
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface UIImageView (fkWebImage)
@property (nonatomic, copy) NSString *urlStr;
@end
NS_ASSUME_NONNULL_END
2.2 .m导入头文件<objc/runtime.h>
2.3 重写urlStr
的set和get方法,代码如下
#import "UIImageView+fkWebImage.h"
#import <objc/runtime.h>
@implementation UIImageView (fkWebImage)
const void *fk_urlKey = "fk_urlKey";
- (void)setUrlStr:(NSString *)urlStr {
objc_setAssociatedObject(self, fk_urlKey, urlStr, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)urlStr {
return objc_getAssociatedObject(self, fk_urlKey);
}
@end
3、外部测试
#import "ViewController.h"
#import "UIImageView+fkWebImage.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImageView *imageView = [[UIImageView alloc] init];
imageView.urlStr = @"http://www.baidu.com/abc.jpg";
NSLog(@"%@", imageView.urlStr);
}
网友评论