一.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不会再帮你定义该成员变量了。因为它不需要再访问该成员变量,也就没必要定义这个成员变量了。