iOS 分类添加属性

1.首先在分类文件中导入头文件 

  #import <objc/runtime.h>

2.实现代码如下:

(1).h定义文件

#import <UIKit/UIKit.h>

@interface UIView (Category)

/*
 * 基本数据类型
 */
@property (nonatomic,assign) CGFloat offset;

/*
 * 对象类型
 */
@property (nonatomic,copy)   NSString *name;

/*
 * 结构体(CGPoint)
 */
@property (nonatomic,assign) CGPoint point;

@end

 

(2).m实现文件

#import "UIView+Category.h"
#import <objc/runtime.h>

static NSString *offsetKey = @"offset";
static NSString *nameKey   = @"name";
static NSString *pointKey  = @"pointKey";

@implementation UIView (Category)

/*
 * 添加基本数据类型需要转化为NSNumber类型
 */

- (void)setOffset:(CGFloat)offset {
    
    objc_setAssociatedObject(self, &offsetKey, @(offset), OBJC_ASSOCIATION_ASSIGN);
}

- (CGFloat)offset {
    
    NSNumber *numberValue = objc_getAssociatedObject(self, &offsetKey);
    return [numberValue intValue];
    
}

/*
 * 对象类型
 */
- (void)setName:(NSString *)name {
    
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)name {
    
    return objc_getAssociatedObject(self, &nameKey);
}

/*
 * 添加结构体属性
 * 需要包装成NSValue
 */
- (void)setPoint:(CGPoint)point {
    
    NSValue *value = [NSValue value:&point withObjCType:@encode(CGPoint)];
    objc_setAssociatedObject(self,&pointKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
}

- (CGPoint)point {
    
    NSValue *value = objc_getAssociatedObject(self, &pointKey);
    if(value) {
        CGPoint point;
        [value getValue:&point];
        return point;
    }else {
        return CGPointZero;
    }
    
}

@end

  

 

 

转载于:https://www.cnblogs.com/HZChenCheng/p/6892806.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值