一.set方法和get方法


1.为成员变量提供set和get方法体现的是一种封装的编程思想。也符合面向对象的程序设计思想。

 1>set方法的作用:
用来设置对象的成员变量,可以在方法实现中过滤掉一些不合理的值,这样不论外界传什么样的垃圾值,都能保证内部的业务逻辑是对的。

 2>get方法的作用:
用来返回对象的成员变量。

2.声明set方法和get方法的规范

 1>set方法
 * 返回值类型必须是(void)。

 * 方法名以set开头,set后面跟上成员变量名(去掉下划线)且成员变量名首字母大写。

 * 形参名不能和成员变量名相同

 * 接收一个参数,参数的类型与成员变量类型一致。

2>get方法

 * 返回值类型与成员变量类型一致。
 * 方法名与成员变量名(去掉下划线)相同。
 * 不需要接收参数

3.实现成员变量的只读
只为成员变量提供get方法,不提供set方法。

二.点语法

1.作用
用来访问对象的成员变量。

2.使用
通过“实例对象.成员变量名”这样的方式来访问对象的成员变量。

3.点语法的本质
点语法的本质还是通过调用对象的set方法和get方法来访问成员变量。编译器根据是否有赋值操作来选择调用setter方法还是getter方法。

4.点语法是一种编译器特性
在进行编译时当编译器遇到点语法时,会根据是否有赋值操作展开成setter或getter方法。

5.注意点
1>.点语法不是通过成员变量名直接访问成员变量的。只是为了让其他行业的程序员快速上手OC语法而提供的一种形式。

2>.死循环陷阱。self调用本身。

三.@property和@synthesize关键字

Xcode4.5及以后版本的@property具备了@synthesize的功能。
这两个关键字实现的功能也是编译器特性。

1.@property
 1>作用
Xcode4.5以前版本的功能:
这个关键字可以帮助我们自动生成某个成员变量的setter和getter声明。
Xcode4.5及以后版本的功能:
新版本的@property功能强大,已经拥有了@synthesize得功能。能够自动生成某个成员变量的setter和getter的声明以及实现,同时如果你没有定义该成员变量,它就在@implementation中定义一个名称带下划线的成员变量,访问权限是@private。

 2>语法格式
这个语法用在类的接口部分,@interface和@end之间且在花括号之外。

@property 成员变量类型 成员变量名(不能有下划线);
@property 成员变量类型 成员变量名 , 成员变量名…; (不推荐)



2.@synthesize(认识该语法维护以前项目时会用到)
从Xcode4.5及以后版本中可以省略,@property包含了@synthesize得功能。
 

 1>作用
这个关键字可以帮助我们自动生成age的setter和getter的实现,因为在方法的实现中会访问到成员变量,如果在@interface部分中没有声明要访问的成员变量,那么就会在@implementation中定义一个与getter方法同名的带下划线的成员变量(@private)。

 2>语法格式
这个语法用在类的实现部分,@implementation和@end之间。

@synthesize property = 成员变量名;
@synthesize property = 成员变量名, property = 成员变量名…; (不推荐)



语法说明:


 *@property:@interface中定义的property。

 *成员变量名:这里要提供的成员变量名,是用来生成方法实现的时候要需要访问的成员变量,如果不提供要访问的成员变量,默认会访问一个同property同名的成员变量(不带下划线),如果这个成员变量不存在,则会在@implementation中定义一个该成员变量。

3.@property的生成原则
1>如果手动定义了setter或者getter的声明或定义,@property就不会在帮你生成你定义过得,只会生成你没有定义的。

2>如果你同时手动定义了某个成员变量的setter和getter,则@property不会再帮你定义该成员变量了。因为它不需要再访问该成员变量,也就没必要定义这个成员变量了。