您的位置:首页 > 移动开发 > IOS开发

如何给iOS 分类添加 属性

2016-05-27 00:00 393 查看
摘要: 比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了

比如我们封装了一个类,不想再动它了,但是我们又需要在那个类中增加一些方法,这时候我们就不必在那个类中做修改或者再定义一个它的子类, 只需要添加一个(Category)即可。但是如果我们想给他添加属性,这样做是肯定不行的。就要用到下面的技术了。

iOS扩展属性:category可以扩展类的方法,但是不能扩张类的属性。如果要扩展类的属性,可以用associative,这个相对于category来说用的比较少,而且他还用到运行时编程,必须使用<obj/runtime.h>,使用objc_getAssociatedObject,objc_setAssociatedObject以及objc_removeAssociatedObjects.这几个方法的生命如下:

示例代码如下:

1、先创建一个person类

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;

@end

#import "Person.h"

@implementation Person

@end

2、新建一个分类,运用associative添加属性

#import "Person.h"
@interface Person (addproty)
@property(nonatomic, copy)NSString *addr;
@end
#import "Person+addproty.h"
#import <objc/runtime.h>
@implementation Person (addproty)
static char strAddrKey = 'a';
- (NSString *)addr
{
return objc_getAssociatedObject(self, &strAddrKey);
}
- (void)setAddr:(NSString *)addr
{
objc_setAssociatedObject(self, &strAddrKey, addr, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: