前面写过对于属性name,self.name是通过方法获得属性值,name是通过属性获取属性值。那么两种添加属性的写法有什么本质区别呢?
.h文件
@interface PObject : NSObject
{
@public
A *a;
}
@property B *b;
.m文件
@synthesize b;
其实上面这种写法等同于:
.h文件
@interface PObject : NSObject
{
@public
A *a;
@private
B *b
}
- (void)setB:(B *)b;
- (B)b;
.m文件
- (void)setB:(B *)b
{
……
}
- (B *)b
{
……
}
所以调用a:self->a,a;
调用b:self->b,b,self.b;
a添加的是成员变量,所以用->调用,b添加的是函数,只不过@synthesize在实现函数的同时声明了个私有成员。如果.m
文件没有@synthesize,那么私有成员b就不会被声明,不过会存在一个私有的_b。
@interface PObject : NSObject
{
A *a;
}
如果不标明,a是protected。