@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 它等同于
@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);
}