iOS开发之oc(二)--类与对象(2)-set/get方法(封装)、init构造方法、对象方法和类方法
面向对象的特征:
1)封装 2)继承 3)多态
知识点:
(1)set/get方法(成员变量的封装)
(2)构造方法
(3)self的使用
(4)对象方法和类方法
小知识点补充
(一)set/get方法
[set]:用形参给成员变量赋值
[get]:返回成员变量的值
代码示例
#import <Foundation/Foundation.h> // 声明 @interface Car : NSObject { // 成员变量的书写,见后有单独一章说明
int _wheels; // 轮子个数 }
/* set方法的声明 1.作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 2.命名规范: 1> 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写 2> 形参名称不要跟成员变量同名(成员变量名是有下划线的,这里是没有的) 3.因为只是提供方法设置值,所以,返回值为void */ - (void) setWheels:(int)newWheels; /* get方法声明 1.作用:返回对象内部的成员变量 2.命名规范: 1> get方法的名称一般就跟成员变量同名 3.因为get方法是要取得成员变量的值,所以返回值类型,和成员变量类型相同 */ - (int) wheels; // 跑 - (void) run; @end @implementation Car // 跑的实现 - (void) run { NSLog(@"%i个轮子的车跑起来了!", wheels); } // set方法的实现 - (void) setWheels:(int)newWheels { // 对外面传进来的轮子数进行过滤(当我们需要过滤数据时,就在这里进行代码修改) if (newWheels<=0) { newWheels = 1; } _wheels = newWheels; // 一般就写这一句就行了 } // get方法的实现 - (int) wheels { return _wheels; } @end // set和get方法的调用 int main() { Car *car = [Car new]; // car->wheels = -10; 当@public时,才能使用此方法直接设置值 // 通过set方法设置Car对象的_wheels成员变量 [car setWheels:-100]; [car run]; // [car wheels]通过get方法获得Car对象的_wheels成员变量 NSLog(@"轮子个数:%i", [car wheels]); return 0; }
补充
// 多个参数(每个标签首字母大写)
-(void)setAge:(int)a AndWeight:(int)w AndHeight:(int)h { //方法一:直接给成员变量赋值(一般使用这个) // _age = a; // _weight = w; // _height = h; //方法二:封装成员变量的setter 方法(作为了解,知道有这么一回事) [self setAge:a]; //self == wangcai [self setWeight:w]; [self setHeight:h]; }
(二)init构造方法(说白就是初始化对象)
1.构造方法有两种
(1)系统提供的默认的构造方法
(2)自定义的构造方法
2.
>在一般语言创建对象或者变量的时候系统自动去调用的方法叫做构造方法。
遗憾的是OC在创建对象的时候不会自动调用构造方法(这里了解就行,重点在下面)
>构造方法的作用:在创建对象的时候对对象的成员变量做初始化
>OC中,凡是以init开头的方法 都是构造方法
>构造方法分为无参构造方法,和带参的构造方法
一个类可以有多个构造方法,在创建对象的时候根据需求去选择调用构造方法
3.1【无参构造方法】
声明的格式 :-(当前类 类型的指针 *)init;
实现的格式:
-(Dog *)init{ self = [super init]; // 先初始化父类 if (self != nil) { // 再初始化子类 _name = @"Tom"; _age = 0; } return self; }
3.2【带参构造方法】
实际上就是带个参数~~ so easy ~~参照set方法的带多参-----见iOS开发之oc(八)--知识补充:id类型和init方法
3.3【对象的初始化顺序】
【注】:一个完整的对象分为父类和当前类两部分,初始化的时候要
1)先去通过super 关键字先去初始化父类这一部分,把初始化父类操作的返回值赋值给self
2)去判断初始化父类时候的返回值,如果返回值不为空说明父类初始化成功,去初始化当前类特有的成员变量
3)返回self
======
(三)对象方法和类方法
>对象方法
1)以减号-开头
2)只能让对象调用,没有对象,这个方法根本不可能被执行
3)对象方法能访问实例变量(成员变量)
>类方法
1)以加号+开头
2)只能用类名调用(通过类名直接调用),对象不能调用
3)类方法中不能访问实例变量(成员变量)
4)使用场合:当不需要访问成员变量的时候,尽量用类方法
注意: 类方法和对象方法可以同名;实例变量_xxx不能在类方法中访问。
>【类方法的三个作用】
1:简单快速的创建对象
2:如果一个功能是由多个方法协同完成的,用 类方法可以留出一个简单易用的接口
3:实现单例模式
===============
说明:
.h和.m文件的抽取
1)每个类分布在不同文件中
2)类的声明放在.h文件,类的实现放在.m文件
3)若想使用某个类,就包含某个类的.h声明文件