标签:
存取方法分为两种:setter方法和getter方法。setter方法,是为对象中的变量赋值。getter方法,是通过对象本身访问对象属性。
在Objective-c中,Cocoa框架在定义存取方法的时候,有相关的规定:
(1). setter方法,根据它的所要去改变的属性名称来命名,并在前面加set前缀。如:setEngine,setTire等。
(2). getter方法,则是以其返回的属性名称来命名,不要将get前缀加到getter方法名前面。因为在Cocoa中,get前缀有其他的用途。一般意味着这个方法会将你传递的参数作为指针来返回数值。
介绍完了基本的概念和定义的规则。下面,我们就来修改“汽车模型”,给汽车的engine和tire设置存取方法。
首先,先在Car对象定义中添加engine和tire的存取方法:
1 @interface Car : NSObject
2 {
3 Engine *engine;
4 Tire *tires[4]; //四个轮子,定义一个四个数的数组。
5 }
6 -(Engine *) engine;
7 -(void) setEngine:(Engine *) newEngine;
8 -(Tire *) tireAtIndex:(int) index;
9 -(void) setTire:(Tire *) tire atIndex:(int) index;
10 -(void) drive;
11 @end // Car
由于,tire有四个子集,所以这里还添加了一个atIndex参数,表示第几个轮子。接下来,实现Car中定义的存储方法:
1 @implementation Car
2 -(void) setEngine:(Engine *) newEngine
3 {
4 engine = newEngine;
5 }
6
7 -(Engine *) engine
8 {
9 return (engine);
10 }
11
12 -(void) setTire:(Tire *) tire
13 atIndex:(int) index
14 {
15 if(index<0 || index>3)
16 {
17 NSLog(@"bad index(%d) in setTire:atIndex",
18 index);
19 exit(1);
20 }
21 tires[index] = tire;
22 }
23
24 -(Tire *) tireAtIndex:(int) index
25 {
26 if(index<0 || index>3)
27 {
28 NSLog(@"bad index(%d)in tireAtIndex:",
29 index);
30 exit(1);
31 }
32 return (tires[index]);
33 }
34
35 -(void) drive{
36 NSLog(@"%@",engine);
37 NSLog(@"%@",tires[0]);
38 NSLog(@"%@",tires[1]);
39 NSLog(@"%@",tires[2]);
40 NSLog(@"%@",tires[3]);
41 }
42 @end
为了传入的index参数不符合条件,使得超出数组,我们做了简单的判断。最后,我们修改main主函数:
1 int main(int argc, const char * argv[])
2 {
3 Car *car = [Car new];
4 Engine *engine = [Engine new];
5 [car setEngine:engine];
6 for(int i=0;i<4;i++)
7 {
8 Tire *tire = [Tire new];
9 [car setTire:tire atIndex:i];
10 }
11
12 [car drive];
13 return 0;
14 }
这时,我们发现:之前在Car中定义的init初始化方法,这边移除掉了。由于Car现在自己定义了访问engine和tires变量的方法。所以,不需要init方法来创建。而是直接在主函数中创建Engine和Tire。
运行结果和之前的没有区别:
魏兆辉的IOS基础学习笔记之九 OC语言基础-04 getter和setter方法
标签:
原文地址:http://www.cnblogs.com/normalwzh/p/4957484.html