Runtime

10 篇文章 0 订阅
  • 有时候,某个控件的系统提供的属性,无法满足我们的需求,那么我们就急迫的去添加某个我们所需要的属性
  • 继承:继承的话,可以实现,但是有时候不太满足的我们所需
    • 继承要改相应控件的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];
}
  • 大家在使用的时候,注意一下各个参数 就行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值