Runtime
2015-11-23 18:54
204 查看
有时候,某个控件的系统提供的属性,无法满足我们的需求,那么我们就急迫的去添加某个我们所需要的属性
继承:继承的话,可以实现,但是有时候不太满足的我们所需
继承要改相应控件的class属性,若我们写出来的框架,想拿来就能直接使用,那么这个时候继承显得不是那么的合适
这个时候,我们想到了分类,但是默认分类里边,不能添加属性,如果要添加,则要重新设置setter,getter方法
这个时候runtime就用上啦
我们来用一下,比如给UIImage 添加一些属性
.h文件
.m文件
大家在使用的时候,注意一下各个参数 就行了。
继承:继承的话,可以实现,但是有时候不太满足的我们所需
继承要改相应控件的class属性,若我们写出来的框架,想拿来就能直接使用,那么这个时候继承显得不是那么的合适
这个时候,我们想到了分类,但是默认分类里边,不能添加属性,如果要添加,则要重新设置setter,getter方法
这个时候runtime就用上啦
OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
我们来用一下,比如给UIImage 添加一些属性
.h文件
#import <UIKit/UIKit.h> //runtime 采用分类的方式动态添加属性 @interface UIImage (Extension) //X坐标 @property (nonatomic,assign) CGFloat x; //Y坐标 @property (nonatomic,assign) CGFloat y; //方向 0:往右移动 1 :往左移动 @property (nonatomic,assign) int direction;
.m文件
-(void)setX:(CGFloat)x{ //需要一个对象 后边的这个X值要保存到哪个对象里面 //key:键 通过key去找Value的值 //value:值 //policy:也就是@property 的属性 用来设置 这个是X属性应该怎么操作 //@selector 如果方法名相同 计算出来的值是一样的 objc_setAssociatedObject(self, @selector(setX:), [NSString stringWithFormat:@"%f",x], OBJC_ASSOCIATION_COPY_NONATOMIC); } -(CGFloat)x{ return [objc_getAssociatedObject(self, @selector(setX:)) floatValue]; } //定义一个变量保存 static char imageY; -(void)setY:(CGFloat)y{ objc_setAssociatedObject(self, &imageY, [NSString stringWithFormat:@"%f",y], OBJC_ASSOCIATION_COPY_NONATOMIC); } -(CGFloat)y{ return [objc_getAssociatedObject(self, &imageY) floatValue]; } -(void)setDirection:(int)direction{ objc_setAssociatedObject(self, @selector(setDirection:), [NSString stringWithFormat:@"%d",direction], OBJC_ASSOCIATION_COPY_NONATOMIC); } -(int)direction{ return [objc_getAssociatedObject(self, @selector(setDirection:)) intValue]; }
大家在使用的时候,注意一下各个参数 就行了。
相关文章推荐
- flex 控件的重要属性
- 插件管理框架 for Delphi(一)
- Delphi控件ListView的属性及使用方法详解
- web下载的ActiveX控件自动更新
- WinForm实现按名称递归查找控件的方法
- 使用CSS框架布局的缺点和优点小结
- C#中父窗口和子窗口之间控件互操作实例
- Android编程之Button控件用法实例分析
- Android控件之CheckBox、RadioButton用法实例分析
- MFC中动态创建控件以及事件响应实现方法
- WinForm自定义函数FindControl实现按名称查找控件
- Android控件之ProgressBar用法实例分析
- 列举PHP的Yii 2框架的开发优势
- WinForm拖拽控件生成副本的解决方法
- ASP.NET动态添加用户控件的方法
- Windows窗体的.Net框架绘图技术实现方法
- ASP.NET的HtmlForm控件学习及Post与Get的区别概述
- 浅谈JavaScript 框架分类
- 轻量级javascript 框架Backbone使用指南
- WinForm实现移除控件某个事件的方法