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;

如果我们使用@synthesize age没有指定给哪个成员复制,那么会自动访问与@synthesize后面同名的成员属性,如果没有同名的成员属性也会自动生成同名私有成员变量

通过@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编译器自动生成带有下划线的私有成员变量。这是由于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

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

* 自动生成下划线的成员属性是私有的,子类是不可以直接访问的

* 如果手动生成_成员属性,系统则不会帮我们生成

* 如果手动同时重写setter跟getter实现,xcode不会帮我们生成下划线属性

最新文章

  1. iOS学习-压缩图片(改变图片的宽高)
  2. Flash跨域传输数据 crossdomain.xml
  3. LeetCode 371. Sum of Two Integers
  4. ddms(基于 Express 的表单管理系统)源码学习
  5. iOS开发小技巧--修改按钮内部图片和文字之间的间距(xib)
  6. mac操作快捷键
  7. redis的实现过程
  8. HDU-4726 Kia&#39;s Calculation 贪心
  9. java常用的包的简介
  10. Spark SQL编程指南(Python)
  11. hdu4324 拓扑排序
  12. Web自动化测试学习点总结
  13. scale相关设置—颜色设置
  14. js 数组的一些基本操作
  15. springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)
  16. Android最火热修复实战
  17. docker运行tomcat
  18. hdu 3466 Proud Merchants 【限制性01背包】+【贪心】
  19. PL/SQL Developer过期解决方法
  20. Confluence 6 修改一个空间从归档到当前

热门文章

  1. Jeecg 切换默认首页方法
  2. c程序查找字符出现次数
  3. MySQL将查询结果写入到文件的2种方法
  4. mybatis的实际应用
  5. Front Page
  6. AVR446步进电机算法推导及应用
  7. linux每日命令(3):which命令
  8. python之常用的数据处理方法
  9. IPC$渗透使用
  10. 用IP地址访问共享文件