2 qq 20401801 qq_20401801 于 2016.03.07 17:52 提问

基于oc的ios开发,如何给一个系统类添加一个属性?

基于oc的ios开发,如何给一个系统类添加一个属性? 目前我知道可以用继承或类别实现。但不知道哪种方式好

3个回答

tongwei1987
tongwei1987   2016.03.08 20:03
已采纳

用类别:
.h文件
#import

@interface UIButton (TLButton)
@property(nonatomic,strong,readwrite)NSNumber* cityId;
@property(nonatomic,strong,readwrite)NSNumber* typeId;
@property(nonatomic,readwrite)NSNumber* pross;
@end
.m文件
#import "UIButton+TLButton.h"
@implementation UIButton (TLButton)
-(NSNumber *)cityId
{
return objc_getAssociatedObject(self, @selector(cityId));
}

  • (void)setCityId:(NSNumber *)cityId
    {

    [self willChangeValueForKey:@"cityId"];
    objc_setAssociatedObject(self, @selector(cityId), cityId, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:@"cityId"];
    }
    -(NSNumber )typeId
    {
    return objc_getAssociatedObject(self, @selector(typeId));
    }
    -(void)setTypeId:(NSNumber *)typeId
    {
    [self willChangeValueForKey:@"typeId"];
    objc_setAssociatedObject(self, @selector(typeId), typeId, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:@"typeId"];
    }
    -(NSNumber
    )pross
    {
    return objc_getAssociatedObject(self, @selector(pross));
    }
    -(void)setPross:(NSNumber*)pross
    {
    [self willChangeValueForKey:@"pross"];
    objc_setAssociatedObject(self, @selector(pross), pross, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self didChangeValueForKey:@"pross"];
    }
    @end

devmiao
devmiao   Ds   Rxr 2016.03.07 23:14
llhub
llhub   2016.03.10 13:43

楼上正解,重写getter setter 方法。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ios 通过Category给系统类添加属性(关联值)
通过给系统类建立类别(Category)文件,使用运行时关联值的方法为系统类添加属性。
iOS给已有类添加属性
给已有类添加方法使用类别(Category)就可以了, 步骤也很简单, Xcode已集成好了创建类别的框架.  那么怎么给已有类拓展一个属性, 甚至更多呢? 网上也有不少方法, 我在此分享一种使用runtime机制来实现此功能. 以NSString为例:  给NSString类添加两种
iOS中OC给Category添加属性
利用Runtime的关联对象技术给Categroy添加属性
iOS为类别添加属性的方法(RunTime)
一般认为Category不能添加变量,其实系统已经告诉我们是可以的. 这家伙已经给UIViewController添加了图中的几个属性,那么如何实现? 其实是使用@dynamic 来动态添加的。 (即运行时Runtime) 代码: 1.创建Person类 #import @interface Person : NSObject @propert
iOS类型里面添加属性
1、在.h里面添加属性 #import @interface UIViewController(UIViewExtend)   @property (nonatomic, retain) NSString *key; @end 2、在.m文件里面添加属性的关联 #import "UIViewCo
iOS-利用运行时给分类添加属性
前面有一篇文章介绍了利用运行时在字典转模型,以及对自定义类归档解档中的使用方法,再补充一个利用运行时给分类增加属性的方法. 我们知道分类的主要作用是在不改变原来类的情况下,给其增加方法,但是却不能增加属性. 但是利用运行时,我们可以给分类增加属性.核心代码如下:#import "UIImageView+webCache.h" #import <objc/runtime.h> const char
在已经定义好的系统类或者自定义类中添加扩展方法
在开发时,有时会发现已定的类的方法并不能够全部满足需求,这时如果要扩展这个类,可以考虑通过继承新增一个类,那如如原来的类是密封类(sealed),那不就无法继承呢?这该怎么办呢?有人会说,这时可以再新建一个类,并将类名在原类上加一个加缀Extension。比如原类是Employee,这时可以叫做EmployeeExtension。这当然是可以的。 那还有没有什么办法可以在沿用原类名的基础上去扩展
iOS runtime 机制 通过别扩展category给一个类添加属性
http://www.cnblogs.com/tangbinblog/p/3944316.html category使用 objc_setAssociatedObject/objc_getAssociatedObject 实现添加属性 属性 其实就是get/set 方法。我们可以使用  objc_setAssociatedObject/objc_getAssociate
Swift给系统的类扩展属性
OC的类别和扩展一般用来给类扩展方法,但有时我们需要给系统的类加一个额外的属性,这需要用到runtime机制。 Runtime是一套底层的C语言API(包含强大的C语言数据类型和函数)OC代码都是基于Runtime实现的,即编写的OC代码最终都会转成Runtime的代码 Runtime的作用: 1、获取类的私有变量 2、动态产生类,成员变量和方法 3、动态修改类,成员变量和方法 4、对换
iOS给UIButton添加一个新的属性
有时候需要给一个控件动态的添加一个属性,比如button控件等。。。   代码如下  给新加的属性赋值 调用set方法赋值 [self.CharacterBtn setOrderTags: [NSString stringWithFormat:@"%ld",11]];   .h文件如下    #import @interface UIControl (Cat