首先写一个简单的get,set方法来熟悉它的作用
//Fraction.h @interface Fraction:NSObject -(void)setNumber:(int) n; -(int)getNumber; //Fraction.m #import Fraction.h @implementation Fraction { int number; } -(void)setNumber:(int)n;{ number = n; } -(int)getNumber{ return number; }
以上的实例不难看出,set、get实际上是两个函数:set方法无返回值,有一个参数,get方法有返回值,无参数,它的返回值就是set方法中接收的那个参数。因此把set方法和get方法统称为存取方法。下面就出现了合成存取方法:@property。
首先@property定义的属性的命名应该与实例变量相同,虽然这不是必须要这样做。@property定义在h文件中,可以将上面的get、set函数简化为如下:
//Fraction.h @interface Fraction:NSObject @property int number; @end
在实现文件中,实际上是有synthesize函数的:
//Fraction.m #import Fraction.h @implemention Fraction @synthesize number;
synthesize告诉OC编译器,为number这个属性生成一对设值方法和取值方法。接下来问题就来了:我使用set方法和get方法时候设值取值直接在main函数中使用[]调用方法就可以了,那么property是怎么设值取值的呢?
按照之前的方法,要获得myFraction(对象名)中存储的number的值,应该使用以下语句
//main.mFraction *myFraction = [[Fraction alloc]init];[myFraction number];
这个操作实际上就是向myFraction对象发送number消息,从而返回所需的值,有了属性之后,就可以通过使用点运算符编写以下等价的表达式
//main.m Fraction myFraction = [[Fraction alloc]init]; myFraction.number = 3;
也就是说,点语法实际上是一种特殊的调用函数的方法而已。需要指出的是,也可以对自定义的方法调用点语法:例如如果有一个取值方法定义为numerator,那么可以在程序中使用myFraction.numerator进行赋值,尽管numerator没有被定义为属性。但是点运算符通常是用在属性上,用于设置或者取得实例变量的值。其它方法的调用通常还是使用[]语法进行调用。
最后需要补充的是,实现文件中的@synthesize是可以省略的,如果省略的话,编译器会地洞分别命名底层的实例变量为_number。
---恢复内容结束---
时间: 2024-10-13 20:03:53