美文网首页
iOS 给分类添加属性

iOS 给分类添加属性

作者: zxb有缘 | 来源:发表于2019-11-11 18:23 被阅读0次

我们都知道可以通过分类添加方法,但是是否可以添加变量有一部分人就不知道了;其实分类里面是不可以添加成员变量的,但是却可以添加属性。

这时候有人会提出,我添加属性后调用会被crash
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSObject setName:]: unrecognized selector sent to instance 0x7fced1f31330

这是因为在分类中添加的属性不会自动生成set、get方法,这是就需要自己在分类的实现文件里面实现属性的set、get方法,如果你跟平时一样去写set、get方法你会发现代码会直接报错
Use of undeclared identifier '_name'

这时就需要用到runtime了,使用runtime实现属性的set、get方法,
具体实现代码如下:

.h文件

import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSObject (Person)
@property (nonatomic, copy) NSString *name;
@end

NS_ASSUME_NONNULL_END

.m文件

import "NSObject+Person.h"

import <objc/runtime.h> /或者 #import <objc/message.h>/

static NSString *nameKey = @"nameKey"; //那么的key

@interface NSObject ()

@end

@implementation NSObject (Person)

/**
setter方法
*/

  • (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
    }

/**
getter方法
*/

  • (NSString *)name {
    return objc_getAssociatedObject(self, &nameKey);
    }
    @end

相关文章

  • iOS runtime 动态添加属性,方法,方法交换案例

    iOS runtime 动态添加属性,方法,方法交换案例 动态添加属性 我之前写过分类的文章,说过,分类不能添加成...

  • ios分类添加属性

    为什么分类不能添加属性 结构体没有属性列表:这也就是为什么分类不能添加属性的本质原因。 属性是什么 生成实例变量 ...

  • ios分类添加属性

    一 定义一个类 Student.h文件 Student.m文件 二 定义分类 三 说明 四 注意事项

  • iOS 分类添加属性

    给分类 Category 添加属性,首先要创建一个分类文件,然后添加你要的属性 .h 文件 @property (...

  • 如何给iOS分类动态添加属性

    给分类扩展属性 创建Person 这个类 并且为Person这个类增加分类 为Person这个类扩充属性te...

  • ios 利用runtime给分类动态添加属性

    1、分类默认是不能添加属性的,这里我们用runtime实现给分类添加属性,本例给UIView添加一个string属...

  • ios中的分类

    在ios中给分类添加属性,可以通过属性关联来实现重写set方法如下: -(NSMutableDictionary ...

  • runtime相关

    修改系统方法 动态添加方法 动态给系统类添加属性(给分类添加属性) runtime+kvc 转换模型

  • Category 用runtime 关联对象

    如何给NSArray添加一个属性(不能使用继承)?不能用继承,难道用分类?但是分类只能添加方法不能添加属性啊(Ca...

  • 类 *分类* 类扩展

    分类:Category iOS中的分类主要的作用就是为类提供扩展,增加一些方法。但是只能添加方法 不能添加属性?我...

网友评论

      本文标题:iOS 给分类添加属性

      本文链接:https://www.haomeiwen.com/subject/svxxictx.html