ios分类添加属性

一 定义一个类

Student.h文件

@interface Student : NSObject
@property (nonatomic,assign) NSInteger age;
@end

Student.m文件

@implementation Student
@end

二 定义分类

import "Student.h"
@interface Student (Extention)
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) NSInteger height;
@end

import "Student+Extention.h"
import <objc/runtime.h>

static char *nameKey = "nameKey";
static char *heightKey = "heightKey";

@implementation Student (Extention)

- (void)setName:(NSString*)name{
    objc_setAssociatedObject(self, nameKey, name, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

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

- (void)setHeight:(NSInteger)height{
  objc_setAssociatedObject(self, heightKey, @(height), OBJC_ASSOCIATION_ASSIGN);
}

- (NSInteger)height{
  return [objc_getAssociatedObject(self, heightKey) integerValue];
}

@end

三 说明

/*

OBJC_ASSOCIATION_ASSIGN;            //assign策略

OBJC_ASSOCIATION_COPY_NONATOMIC;    //copy策略

OBJC_ASSOCIATION_RETAIN_NONATOMIC;  // retain策略

OBJC_ASSOCIATION_RETAIN;

OBJC_ASSOCIATION_COPY;

*/

/*

* id object 给哪个对象的属性赋值

const void *key 属性对应的key

id value  设置属性值为value

objc_AssociationPolicy policy  使用的策略,是一个枚举值,和copy,retain,assign是一样的,手机开发一般都选择NONATOMIC

objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);

*/

四 注意事项

需包含 #import <objc/runtime.h> 头文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,608评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,789评论 0 9
  • 本作业,全是故事,写不好就是事故,技术含量为零,全是错的。 【黑盒测试】 张小厨是一个美食家(吃货),没事儿就爱到...
    花昇阅读 180评论 0 0
  • 嗨!简书 感觉自己有了一个后花园,随心随意开采和撒欢。记录生活的细节,留下脑海里臆想。加油!不曾坚持的梦想,有了新...
    姗姗的小故事阅读 154评论 1 1