码迷,mamicode.com
首页 > 其他好文 > 详细

基础回顾:get方法和set方法(类的继承多态)

时间:2016-01-14 14:15:52      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

基础回顾:get方法和set方法

定义类成员变量时,可以在@interface中定义,也可以在@implementation中定义:

在@interface中声明,成员变量的状态是受保护的,即“@protected”;

在@implementation中声明,成员变量的状态是私有的,即“@private”

在类的外面,是无法直接访问成员变量的,只有将成员变量修改为@public时,才可以外部访问。

使用@public时,访问成员变量使用“->”,如:

time->hour=25;

但使用@public是有风险的(如上面代码中将hour设置为25,实际只有24小时),所以一般访问成员变量都使用get和set方法;

get方法的声明:

-(int)hour;    //get方法,命名规则:返回类型即成员变量的类型,方法名是成员变量名

set方法的声明:

-(void)setHour:(int)newHour    //set方法,命名规则:返回类型是void,方法名是set+成员变量名字的首字母大写,带一个参数,参数类型位成员变量的类型

get方法的实现:

-(int)hour
{
    return hour;          
}

set方法的实现:

技术分享
-(void)setHour:(int)newHour
{
    if(newHour>24||newHour<0)    //对不合理的值进行过滤
    {
         hour=0;
    }
    hour=newHour;
}
技术分享

使用get方法和set方法之后,就可以使用“.”语法访问成员变量:

time.h=22;

“.”语法可以自动调用get方法和set方法,当给成员变量赋值时,自动调用set方法;当获得成员变量时,自动调用get方法;

time.h=22;    //自动调用set方法赋值
xiaoShi=time.h    //自动调用get方法获得time.h的值

在Objective-C中,提供了两个语句,可以自动生成get和set方法:

@property:只能用在@interface中,为成员变量自动生成相应的get和set方法声明

@synthesize:只能用在@implementation中,为成员变量自动生成相应的get和set方法实现

例如:

@property int hour;

@synthesize hour;

进阶:@property和@synthesize的特性

1.使用@property和@synthesize后,仍然可以使用setHour:来访问成员变量:

Time *tm=[Time new];
[tm setHour:22];

2.使用@property和@synthsize后,虽然自动生成了get和set方法,仍然可以自己重新定义set和get方法,重新定义的方法会覆盖掉自动生成的方法,OC的这个特性为过滤数据和设置某些规则提供了方便。

3.当只使用@property自动生成get和set方法时,@property会自动生成一个名为“_名称”的成员变量:

@property int hour;  //自动生成成员变量"_hour"

这时@property自动进行了3个操作:

  1)生成一个名为“_hour”的成员变量(4.6版本以后的Xcode)

  2)为“_hour”生成相应的get和set方法的声明

  3)位“_hour”生成相应的get和set方法的实现

所以,使用@propery后,就可以省略掉“{}”中的成员变量声明,因为它已经自动生成了。

4.@synthesize hour,会寻找实例变量”hour”,如果没有找到,则自动生成一个”hour”成员变量

使用:@synthesize hour=_hour,就可以使“hour”和”_hour”联系起来了,并不再生成“hour”成员变量

5.在set和get方法中,不允许使用“self.”,因为“self.”调用的就是方法本身,会形成死循环。

  • 成员变量如果不需要外部访问,则还是按以前的方式用大括号

基础回顾:get方法和set方法(类的继承多态)

标签:

原文地址:http://www.cnblogs.com/wangmingxing/p/5129887.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!