iOS 关键字 @property,@synthesize,@dynamic

1,759 阅读1分钟

@property

最常见,帮我们生成成员变量,setter和getter方法。 需要注意的是,如果同时重写了setter和getter的话,那么系统就不会帮我们生成成员变量。

@synthesize:

一般的写法是这样的

@implementation ViewController

@synthesize publicName = ffff;

如果类里没有ffff这个成员变量,它会自动帮你创建一个,并且帮你生成如下的setter和getter方法。

- (void)setPublicName:(NSString *)publicName{
     ffff = publicName;
}

- (NSString *)publicName{
    return  ffff;
}
 

所以这个@synthesize,主要用来让他和某个成员变量绑定,值得注意的是,我们@property声明一个属性publicName,默认的就是

@synthesize publicName = _publicName;

有时候会看到 @synthesize publicName 它等同于

@synthesize publicName = publicName;

@dynamic publicName;

一般这样写的话,就是告诉系统不要给我们自动生成setter,getter方法。编译器编译的时候也不会报错,如果你这样声明了,但是没有自己去实现setter和getter的话,系统调用self.publicname会crash. 一般用在给category添加属性时用到它。

#import "Person+mj.h"
#import <objc/runtime.h>
 

@implementation Person (mj)

static NSString *nameKey = @"nameKey"; //name的key

@dynamic info;

- (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_COPY);
}

- (NSString *)name {
    return objc_getAssociatedObject(self, &nameKey);
}