码迷,mamicode.com
首页 > 其他好文 > 详细

category and extension(二)

时间:2014-07-07 17:23:40      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

Category And Extension(二)

Category And Extension(二)

add property to category


上一篇文章说不能加category添加属性,最近做的一个项目刚好有这个需求,google了一下,其实category是有办法添加属性的-_-,而且还有多种方法,在这里总结一下.


1>.methods1

直接在category的.h中添加,这时xcode会有warning。

Property ‘test1‘ requires method ‘test1‘ to be defined - use @dynamic or provide a method implementation in this category

按照提示在.m文件在@dynamic关键字修改就OK了。dynamic在编译时不会检查setter/getter的实现,在运行时setter/getter会动态绑定,在需要setter/getter的class中自己实现就OK了。

 #import <Foundation/Foundation.h>

@interface NSObject (AddProperty1)

@property(nonatomic,strong)NSString *test1;

@end

----------------------------------------------------------------------

#import "NSObject+AddProperty1.h"

@implementation NSObject (AddProperty1)

@dynamic test1;

@end

(在用这种方法添加proprety,使用setter/getter的class如果不implementation会crash的)

2>.methods2

//只用在.h文件添加协议
#import <Foundation/Foundation.h>

@protocol NSObjectProtocol <NSObject>

@optional

@property(nonatomic,strong)NSString *test3;

@end

@interface NSObject (AddProperty3)<NSObjectProtocol>

@end

同上一种方法一样,在使用setter/getter的class中要implementation,否则会crash

3>.methods3

#import <Foundation/Foundation.h>

@interface NSObject (AddProperty2)

@property(nonatomic,strong)NSString *test2;

@end

----------------------------------------------------------------------

#import "NSObject+AddProperty2.h"

#import <objc/runtime.h>

@implementation NSObject (AddProperty2)


-(NSString*)test2{

    return objc_getAssociatedObject(self, @selector(test2));
}

-(void)setTest2:(NSString *)test2{

    objc_setAssociatedObject(self, @selector(test2), test2, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}
@end

利用objctive-c的runtime特性。个人更偏好于第三种方法,改动最小,而且在不知道源码的源码的情况下也能add property

附上Demo省得以后自己忘记了

CategoryAndExtension.zip

category and extension(二),布布扣,bubuko.com

category and extension(二)

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/px-0/p/3813674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!