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

  

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM