类别中使用属性的两种方法

类别因不能添加实例变量,所以添加属性不能生成实例变量也不能自动生成setter跟getter方法,但可以自己实现setter跟getter方法。

第一种使用属性的方法:自己实现setter跟getter方法,用参数的值判断对主类中实例变量做一些操作。

.h文件代码:

#import "Fimaly.h"

 

@interface Fimaly (Play)

@property (nonatomic,assign) int age;

 

@end

 

 

.m文件代码

#import "Fimaly+Play.h"

 

@implementation Fimaly (Play)

- (void)setAge:(int)age

{

    if (age<10) {

        _nike=@"child";

    }

    else

    {

        _nike=@"man";

    }

    NSLog(@"%@",_nike);

}

- (int)age

{

    if ([_nike isEqualToString:@"child"]) {

        return 10;

    }

    else

    {

        return 20;

    }

}

@end

 

 

 

第二种方法是通过关联对象存储信息

 

 

#import "Fimaly+Play.h"

#import <objc/objc-runtime.h>

 

@implementation Fimaly (Play)

- (void)setAge:(int)age

{

    objc_setAssociatedObject(self, "age", @(age), OBJC_ASSOCIATION_RETAIN);

}

- (int)age

{

    NSNumber *number=objc_getAssociatedObject(self, "age");

    return [number intValue];

}

@end

posted on 2014-10-08 21:00  陈丰波  阅读(183)  评论(0编辑  收藏  举报