property和synthesize

创建一个Person类。提供成员属性的_age和_height的setter和getter方法。

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
int _age;
int _height;
} - (void)setAge:(int)age;
- (int)age;
@end #import "Person.h"
@implementation Person - (void)setAge:(int)age
{
_age = age;
}
- (int)age
{
return _age;
}
@end

开发中考虑封装性将成员属性通过提供setter与getter结构供外界访问。但是这些setter跟getter代码没有任何技术含量。于是苹果提供关键字propertysynthesize 关键字利用编译器特性将我们自动生成setter跟getter方法。

@property int age;
// - (void)setAge:(int)age;
// - (int)age; @synthesize age;
/*
- (void)setAge:(int)age
{ }
- (int)age
{ }
*/

@synthesize age虽然帮我们实现了set跟get方法的实现,并未指定将外界传递的值对哪个成员属性进行赋值。如上Person类需要给成员_age复制。

@synthesize age = _age;



通过@property 和@synthesize我们可以对Person类简写成如下

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
int _age;
int _height;
} @property int age;
@property int height;
@end #import "Person.h"
@implementation Person @synthesize age = _age;
@synthesize height = _height;
@end

上面的Person类还可以继续进行简写,这是由于Xcode的功能强大。

#import <Foundation/Foundation.h>
@interface Person : NSObject @property int age;
@property int height;
@end #import "Person.h"
@implementation Person @synthesize age = _age;
@synthesize height = _height;
@end

Xcode4.4之后property关键字可以独揽@synthesize的功能。因此Person类可以简写:

#import <Foundation/Foundation.h>
@interface Person : NSObject @property int age;
@property int height;
@end #import "Person.h"
@implementation Person @end

自动生成的下划线成员属性特点:

*

*

*

04-14 04:19