iOS 运行时runtime应用之二--在category中使用运行时API给类添加属性

本文介绍了一种利用Objective-C运行时API为UIImage类扩展borderWidth和borderColor属性的方法。通过这种方式,可以在不修改原始类的基础上为其增加新的特性。

例证:

#import <UIKit/UIKit.h>
#interface UIImage (Extension)
#property(nonatomic,assign)CGFloat borderWidth;   // 边框宽度
@property(nonatomic,strong)UIColor *borderColor;   //边框颜色
- (UIImage*)circle;
@end

@import "UIImage+Extension.h"
@import <objc/runtime.h>
/** 每个属性关联的关键字是唯一的 所以使用常量定义  */
static const char *lyy_image_borderWidthKey = "lyy_image_borderWidthKey";
static const char *lyy_image_borderColorKey =  "lyy_image_borderColorKey";

@implementation UIImage (Extension)
- (UIImage*)circle{
    return nil;
}

- (void)setBorderWidth:(CGFloat )borderWidth{
    objc_setAssociatedObject(self, lyy_image_borderWidthKey, @(borderWidth), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (CGFloat)borderWidth{
    id width = objc_getAssociatedObject(self, lyy_image_borderWidthKey);
    if ([width respondsToSelector:@selector(doubleValue)]) {
        return  [width doubleValue];
    }
    return 0; //默认为0
}

- (void)setBorderColor:(UIColor*)borderColor{
    objc_setAssociatedObject(self, lyy_image_borderColorKey, borderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIColor*)borderColor{
    UIColor *color = objc_getAssociatedObject(self, lyy_image_borderColorKey);
    if(color){  // 判断 让你的思维变得更加缜密
        return color;  
    }
    return [UIColor whiteColor]; //默认为白色
}
@end

通过运行时的API,实现了给UIImage类添加了两个属性 borderWidth(边框宽度);borderColor(边框颜色)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值