getter/setter方法
本小节知识:
- setter方法
- getter方法
- getter/setter方法注意点
- 练习
1.setter方法
-
作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值
-
命名规范:
- 必须是对象方法
- 返回值类型为void
- 方法名必须以set开头,而且后面跟上成员变量名去掉”_” 首字母必须大写
- 必须提供一个参数,参数类型必须与所对应的成员变量的类型一致
- 形参名称和成员变量去掉下划线相同
-
举例:
objc 如:如果成员变量为int _age 那么与之对应seter方法为 -(void) setAge: (int) age;
-
setter方法的好处
- 不让数据暴露在外,保证了数据的安全性
- 对设置的数据进行过滤
2.getter方法
-
作用:为调用者返回对象内部的成员变量的值
-
命名规范:
- 必须是对象方法
- 必须有返回值,返回值的类型和成员变量的类型一致
- 方法名必须是成员变量去掉下划线
- 一定是没有参数的
-
举例
如:如果成员变量为int _age 那么与之对应geter方法为
- (int) age;
- getter方法的优点:
- 可以让我们在使用getter方法获取数据之前,对数据进行加工;
- 比如双十一活动,我们希望对全线商品的价格在原来的价格基础上打五折,那么我们只要去改成品类的价格的getter方法就可以了,让他返回的值为价格 * 0.5
3.getter/setter方法注意
-
在实际的开发中,不一定set和get方法都会提?供,如果内部的成员变量,比如学生的学号或计算出来的数据。这样的数据只允许外界读取,但是不允许修改的情况,则通常只提?供get方法而不?提供set方法 。
-
成员变量名的命名以下划线开头,get方法名不需要带下划线
-
成员变量名使用下划线开头有两个好处
- 与get方法的方法名区分开来
- 可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。当我看到以下划线开头变量,那么他一定是成员变量
4.练习
- 设计一个K线类, 有三个属性, 最高价格, 最低价格, 平均价格. 要求可以设置和获取这三个属性
点语法
本小节知识点:
- 【掌握】点语法基本使用
- 【掌握】点语法的本质
- 【掌握】点语法注意
1.点语法基本使用
2.点语法的本质
- 其实点语法的本质还是方法调用
- 当使用点语法时,编译器会自动展开成相应的方
- - 当点语法使用在 “=“赋值符号左侧的时候,点语法会被展开为setter方法的调用,其他情况(等号右侧、直接使用)为点语法展开为getter方法的调用
3.点语法注意
-
点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法调用。
-
切记点语法的本质是转换成相应的对setter和getter方法调用,如果没有set和get方法,则不能使用点语法。
-
不要在getter 与 setter方法中使用本属性的点语法
- (void) setAge:(int)age {
// 下面的代码会引发死循环
self.age = age;
//编译器展开后 [self setAge:age]
}
- (int) age {
// 下面的代码会引发死循环
return self.age;
// 编译器展开后 [self age]
}
Self关键字
本小节知识点:
- 类方法中的self
- 对象方法中的self
- 全局变量成员变量局部变量
- self总结
- self使用注意
- OC提供了两个保留字self和super
- OC语言中的self,就相当于C++、Java中的this指针。
- 要理解什么是self,什么是成员变量,什么是对象方法,什么是类方法
- 成员变量:成员变量是一个实例对象的具体状态特征,并且这些状态特征是可以改变的,如张三的年龄,身高,体重等
- 对象方法:一个实例对象的行为,比如张三具有吃的行为,张三做出这样行为的时候,有可能会影响,自身的某些状态特征,比如张三吃可能会增加张三体重和身高。
- 类方法:类方法是某个类的行为,可以直接通过类名调用;如果在类方法中需要使用某些数据,必须通过参数传入;它不能访问成员变量。
1.类方法中的self
- 在整个程序运行过程中,
一个类有且仅有一个类对象
。 - 通过
类名
调用方法就是给这个类对象
发送消息。 - 类方法的self就是这个类对象
- 在类方法中可以通过self来调用其他的类方法
- 不能在类方法中去调用对象方法或成员变量,因为对象方法与成员变量都是属于具体的实例对象的。
2.对象方法中的self
- 在整个程序运行过程中,
对象可以有0个或多个
- 通过
对象
调用方法就是给这个对象
发送消息 - 对象方法中self就是调用这个方法的当前对象。
- 在对象方法中,可以通过self来调用本对象上的其他方法
- 在对象方法中,可以通过self来访问成员变量
3.全局变量成员变量局部变量
- 全局变量:只要是有声明它的地方都能使用
- 成员变量:只能在本类和其子类的对象方法中使用
- 局部变量:只能在本函数或方法中使用
- 从作用域的范围来看:全局变量 > 成员变量 > 局部变量
- 当不同的作用域中出现了同名的变量,内部作用域的变量覆盖外部作用域变量,所以同名变量的覆盖顺序为:局部变量覆盖成员变量,成员变量覆盖全局变量
- 如果在对象方法中出现与成员变量同名的局部变量,如果此时想使用该成员变量可以通过self->成员变量名的方式
4.self总结
- 谁调用self所在的方法,那么self就是谁
- self在类方法中,就是这个类的类对象,全局只有一个,可通过self调用本类中的其他类方法,但是不能通过self来调用对象方法或访问成员变量
-
self在对象方法中,就是调用这个方法的那个对象, 可以通过self调用本类中其他的对象方法,访问成员变量,但不能通过self调用本类的类方法。
-
通过self调用方法的格式:[self 方法名];
-
通过self访问成员变量格式:self->成员变量名
5.self使用注意
- 同时有对象方法和类方法存在的时候,self不会调错
- self只能在方法中使用;不要使用self来调用函数,也不可以在函数内部使用self;
- 使用self调用本方法,导致死循环调用。
Super关键字
本小节知识点:
1.super基本概念 2.super的作用
1.super基本概念
- super是个编译器的指令符号,只是告诉编译器在执行的时候,去调谁的方法. >+ self是一个隐私参数;
objc self refers to the object receiving a message in objective-C programming.
>+ super 并不是隐藏的参数,它只是一个“编译器指示符”,它和 self 指向的是相同的消息接收者
super is a flag that tells the compiler to search for the method implementation in a very different place. It begins in the superclass of the class that defines the method where super appears.
2.super的作用
+ 1.直接调用父类中的某个方法
+ 2.super在对象方法中,那么就会调用父类的对象方法
super在类方法中,那么就会调用父类的类方法
- 使用场合:
- 子类重写父类的方法时想保留父类的一些行为