美文网首页
OC学习之分类添加属性

OC学习之分类添加属性

作者: 龙马君 | 来源:发表于2016-04-04 22:55 被阅读229次

分类添加的属性要生成get和set方法,不会自动产生私有变量。需要调用runtime里面的方法,进行关联对象。

  • 方法一:定义静态变量,采用静态变量的地址。
  • 方法二:直接使用get函数的地址

代码如下:

// Person分类
@interface Person( PersonSub )

@property (nonatomic, strong) NSString* newName;
// 新增方法
-(void)newPrint;
@end
#import "PersonSub.h"
#import <objc/runtime.h>

static char kAssociatedNewName;

@implementation Person( PersonSub)

// 分类添加的属性要生成get和set方法,不会产生私有变量。
// 需要调用runtime里面的方法,进行关联对象。
// 方法一:定义静态变量,采用静态变量的地址。
// 方法二:直接使用get函数的地址

// _cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例一样。
// 相当于函数指针,设置objc_getAssociatedObject和objc_setAssociatedObject的key都为newName函数的指针。
-(NSString *)newName{
    return objc_getAssociatedObject(self, _cmd);
    //return objc_getAssociatedObject(self, &kAssociatedNewName);
}

-(void)setNewName:(NSString *)newName{
    objc_setAssociatedObject(self, @selector(newName), newName, OBJC_ASSOCIATION_RETAIN);
    //objc_setAssociatedObject(self, &kAssociatedNewName, newName, OBJC_ASSOCIATION_RETAIN);
}

-(void)newPrint{
    NSLog(@"Person newPrint name = %@", name);
}
@end

相关文章

  • Category关联对象

    OC中的分类严格来说,是不能添加对象;但是我们可以通过OC运行是的机制,动态为分类添加属性 一、类中的属性 当在类...

  • OC学习之分类添加属性

    分类添加的属性要生成get和set方法,不会自动产生私有变量。需要调用runtime里面的方法,进行关联对象。 方...

  • 分类-Category

    分类-Category 分类的功能 在OC中,我们可以使用分类为类添加方法,属性.也可以覆盖类原有的方法,自己添加...

  • 分类-Category

    分类-Category 分类的功能 在OC中,我们可以使用分类为类添加方法,属性.也可以覆盖类原有的方法,自己添加...

  • OC中分类的实现原理

    OC中为类添加一个分类(Category)可以实现为类添加对象方法、类方法、添加属性(添加的属性不生成成员变量)、...

  • iOS 动分类添加手势(OC/Swift)

    OC版本 我们在OC经常会有需求给UIView添加手势的功能我们可以给分类添加属性是这么写的,即使用Runtime...

  • 分类(Category)添加属性

    OC的分类允许给分类添加属性,但不会自动生成setter和getter,可通过运行时建立关联引用,添加一个titl...

  • 通过runtime给分类添加属性

    OC中的分类只能添加方法,没有办法新增属性,但是有时候我们需要给分类新增属性,我们可以通过runtime实现。 R...

  • OC属性关联的实现原理

    OC中在分类中添加属性用属性关联技术来实现存取值的: 那么系统的属性关联功能是如何实现的呢? 属性关联怎么存储对象...

  • runtime 分类不能添加属性

    分类不能添加属性,类别可以,添加runtime之后,可以添加属性

网友评论

      本文标题:OC学习之分类添加属性

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