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

《objective-c基础教程》学习笔记(七)—— 存取方法

时间:2014-11-27 00:07:40      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   使用   sp   for   

  在上一篇博文中,我们有拿一个简单的“汽车模型”来讲解复合关系。在今天的这篇博文中,我们将接着上一次的例子,讲解下存取(accessor)方法的使用。所谓存取方法,就是用来读取或改变某个对象属性的方法。如果添加一个方法去改变Car对象中的engine对象变量,那它就是一个存取方法。

  存取方法分为两种: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。

  运行结果和之前的没有区别:

bubuko.com,布布扣

  通过这个简单修改的例子,希望大家对Cocoa框架中的存取方法的使用方法有更深的了解。

《objective-c基础教程》学习笔记(七)—— 存取方法

标签:style   blog   http   io   ar   color   使用   sp   for   

原文地址:http://www.cnblogs.com/jianglan/p/4125384.html

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