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

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

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

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

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

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

time->hour=;

但使用@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>||newHour<) //对不合理的值进行过滤
{
hour=;
}
hour=newHour;
}

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

time.h=;

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

time.h=;    //自动调用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:];

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.”调用的就是方法本身,会形成死循环。

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

   

@property和@synthesize的特性的更多相关文章

  1. ios中点语法、property跟synthesize用法

    一:OC中得点语法 1> 点语法的基本使用: ·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值   2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个 ...

  2. Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型

    点语法 1.利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge : 18]; int age = [stu age]; ...

  3. OC开发系列-@property和@synthesize

    property和synthesize 创建一个Person类.提供成员属性的_age和_height的setter和getter方法. #import <Foundation/Foundati ...

  4. Objective-C中的@property和@synthesize用法

    @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...

  5. iOS 详细解释@property和@synthesize关键字

    /** 注意:由@property声明的属性 在类方法中通过下划线是获取不到的 必须是通过 对象名.属性 才能获取到!- @property和@synthesize关键字是针对成员变量以及get/se ...

  6. OC中两个关键字的作用:@property和@synthesize

    两个关键字的使用:@property和@synthesize 一.@property关键字这个关键字是OC中能够快速的定义一个属性的方式,而且他可以设置一些值,就可以达到一定的效果,比如引用计数的问题 ...

  7. OC语法5——@property和@synthesize

    @property和@synthesize: 我们回想一下: 在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m. Student.h(声明文件):定义成员变量 ...

  8. Objective-C基础笔记(2)@property和@synthesize

    先贴出使用@property和@synthesize实现的上一篇中的代码,再解释这两个keyword的使用方法和含义,代码例如以下: Person.h文件 #import <Foundation ...

  9. Objective-c @property和@Synthesize

    在Objective-c中,使用@property来标识属性(一般是实例变量).在实现文件中使用@synthesize标识所声明的变量,让系统自动生成设置方法和获取方法. 也就是说@property和 ...

随机推荐

  1. Maven生命周期(插件)

    maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...

  2. iOS - UIActivityViewController

    前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewControl ...

  3. hibernate对象关系实现(三)多对多实现

    单向n-n:(catogory-item)一个类别对应多个条目,一个条目对应多个类别 a.以类别类中有条目的集合的引用为例: b.数据库中的体现:建立一个新表,以类别和条目的主键关联的外键做新表的联合 ...

  4. dateTimePicker的使用,时间控件

    <li> <label>促销时间<span class="imprt">*</span></label> <inp ...

  5. Python学习(13)函数

    目录 Python 函数 函数调用 匿名函数 return语句 变量作用域 Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复 ...

  6. JQuery Ajax 的简单使用

    简单判断用户名存在不存在,如果数据库存在此用户名,提示不能注册 前台代码如下: <!DOCTYPE html> <html lang="en"> <h ...

  7. Android星星评分控件RatingBar的使用

    在Android的开发中,有一个叫做评分控件RatingBar,我们可以使用该控件做等级划分.评分等作用,星星形状显示,也可以半星级别,我们来看一下评分控件如何使用. 布局文件中定义控件以及属性,这里 ...

  8. 转:为什么C++中空类和空结构体大小为1?

    参考:http://www.spongeliu.com/260.html 为什么C++中空类和空结构体大小为1? On November 17, 2010, in C语言, 语言学习, by spon ...

  9. D3.js 布局

    布局,可以理解成 “制作常见图形的函数”,有了它制作各种相对复杂的图表就方便多了. 一.布局是什么 布局,英文是 Layout.从字面看,可以想到有“决定什么元素绘制在哪里”的意思.布局是 D3 中一 ...

  10. D3.js 坐标轴

    坐标轴,是可视化图表中经常出现的一种图形,由一些列线段和刻度组成.坐标轴在 SVG 中是没有现成的图形元素的,需要用其他的元素组合构成. D3 提供了坐标轴的组件,如此在 SVG 画布中绘制坐标轴变得 ...