魏兆辉的IOS基础学习笔记之九 OC语言基础-04 getter和setter方法

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

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

时间: 2024-08-02 02:51:34

魏兆辉的IOS基础学习笔记之九 OC语言基础-04 getter和setter方法的相关文章

魏兆辉的IOS基础学习笔记之十 OC语言基础-05 @property关键字

在上一篇笔记中是学习了怎样手动编写getter和setter方法,相对来说复杂一些,今天学习了@property关键字就可以自动的生成这两个方法,十分方便, 另外在内存管理中,也可以使用这个关键字,省去了重写dealloc函数的麻烦,只需要写进去关键词就可以. 让系统自动合并setter和getter只要两个步骤: (1). 在类接口部分使用@property指令定义属性. (2). 在类实现的部分使用synthesize指令声明该属性即可. 所有,上面例子中定义Engine的存取方法我们可以修

魏兆辉的IOS基础学习笔记之十一 OC语言基础-06 Foundation框架介绍

在之前的博文中,我们创建的项目文件的时候,默认都有引用#import <Foundation/foundation.h> 这个头文件.但是,之前我们对Foundation都没有展开介绍.这篇博文,我们就揭开它神秘的面纱. 之前,我们有提到过OC使用的是Cocoa框架.那么Cocoa和Foundation之间,有啥关联呢?实际上,Cocoa是由许多个不同的框架组成的.最常用的是Foundation和Application Kit. Foundation框架中有很多有用的.面向数据的简单类和数据类

魏兆辉的IOS基础学习笔记之二 C语言基础-02

1. typedef 在前文中,我们用宏定义来定义了一个BOOL类型,那么现在就用更专业的方式来定义类型. typedef int Bool; int main (void){ Bool flag=1; if(flag) { printf("True"); } else { printf("false"); }} typedef 的作用就是类型定义(Type Definition). 类型定义有以下三个优点: 1. 易于阅读.比如我们可以把定义一个Dollar,然后

【学习笔记】【OC语言】set方法和get方法

1.set方法和get方法的使用场合@public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数2.set方法作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值命名规范:方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写形参名称不要跟成员变量同名3.get方法作用:返回对象内部的成员变量命名规范:get方法的名称一般就跟成员变量同名4.成员变量的命名规范成员变量都以下

魏兆辉的IOS基础学习笔记之十二 OC语言基础-07 Foundation内存管理

本篇博文,将给大家介绍下再Objective-C中如何使用内存管理.一个程序运行的时候,如果不及时的释放没有用的空间内存.那么,程序会越来 越臃肿,内存占用量会不断升高.我们在使用的时候,就会感觉很卡,最终使得程序运行奔溃.因此,将无效的内存及时清理释放,是非常有必要的. 一个对象在最初创建使用,到最后的回收释放,经历的是怎样一个过程呢?包括:诞生(通过alloc或new方法实现).生存(接收消息并执行操作).交友(通过复合以及向方法传递参数).最终死去(被释放掉). 一.引用计数 在对象创建的

魏兆辉的IOS基础学习笔记之四 C语言基础-04 函数

1. 数组作为函数参数 函数是我们学习程序设计语言最基本的东西了,我在此不再赘述.只讨论一种特殊情况,就是数组作为函数的参数传递. 我们都知道,其实在传递数组的时候,实际上是传递了数组首元素的指针.明确了这一点之后,我们就可以思考下面的问题. 既然他只是传递了数组首元素的指针,那么他必然无法知道整个数组的大小,因此,我们如果希望在函数中用到数组的长度,必须要进行显式传递. int Sum(int a[],int size){ int i ,sum=0; for(i=0;i<size;i++) {

魏兆辉的IOS基础学习笔记之六 OC语言基础-01 面向对象

一听标题,感觉十分的抽象.面向对象就是(Object-Oriented Programming)的首字母缩写:OOP,是当今最主流的编程方法. 那么,面向对象编程具体有什么好处呢.是如何来实现呢?通过下面的实例,我想可以给大家最简单直观的理解了. 好了,下面就来说说我们这篇博文主要要介绍的内容吧.今天,我们通过一个绘制几何图形的实例来介绍基本的面向对象思想. 首先我们,新建一个Command Tools的命令行工具项目,选择Foundation头文件. 1 / 2 // main.m 3 //

魏兆辉的IOS基础学习笔记之十四 OC语言基础-09 OC对象的内存管理

一. 原理 对于任何继承了NSObject的对象,都有一个与之关联的整形变量,称为引用计数器:只有计数器的值为0的时候,OC就回收该对象,否则永不回收. 1. 创建对象时,如使用alloc ,new , copy,引用计数器的值为1 2. 当使用release方法释放时,计数器的值减1 3. 当使用retain方法时,计数器的值加1 4. 当对象被回收时候,自动调用对象的dealloc方法, 5. 使用retainCount方法来获取引用计数器的值 二. 防止内存泄露标准示例写法: @class

Python基础学习笔记(九)常用数据类型转换函数

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 常用数据类型转换函数: 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x