1、什么是对象
在学习语言的过程中,都会遇到两个问题:面向过程和面向对象。面向过程
:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步的实现,使用的时候一个一个一次调用就可以了。
面向对象
:把构成问题的事务分解成各个对象,然后协调各个对象之间的联系和通信,建立对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤中的行为。
那么什么是对象呢?此对象
可不是说男女相亲时候的那个对象
,而是泛指所有具体的事物,都可以称之为对象
。
2、什么是类?
类的定义
:将具有相同属性和共同行为的一组对象的集合放在一个单元中,就称之为类。
比如说:白猫,黑猫,灰猫等等,它就属于猫类。如果猫,狗,猪放在一起,可以抽象出动物类。那么猫类就属于动物类的一个子类,而动物类则成为猫类的父类。
类的属性
:对象或者实体所拥有的特征在类中表示为类的属性。
例如:猫的颜色。
类的方法
:对象执行的操作成为类的方法。
例如:猫会抓老鼠。也就是说,对象的行为。
3、什么是封装
在Objective-C中,一个对象是由很多属性和方法组成的,将属性和方法相结合,共同体现对象的特性,称为封装。封装可以做到隐藏内部实现,稳定外部接口。
4、类和对象的关系
它们的关系是,对象是类的实例,类是对象的模板。对象是通过new className产生的,用来调用类的方法;类的构造方法 。
类不是凭空造出来的,一般是为了解决具体问题从现实中抽象出来的。
5、iOS中的类
创建一个mySchoolProject
的项目,新添加一个学生类。
由图可以看到,这个类有两个文件:.h和.m文件。
在Objective-C中,类是由接口(interface)和实现(implemention)两部分组成的。
@interface部分
1、#import指令
#import
指令和C语言的#include指令类似,但是#import指令能避免头文件被重复包含的问题。且#import<>包含iOS框架类库里面类的头文件,#import""包含项目里自定义类的头文件。
2、实例变量
在Objective-C中,类的特征都是用变量来表示的,这种变量称为实例变量(成员变量),声明在@interface下的“{}”中。
3、方法声明
在接口文件中的功能方法是没有实现的,只是描述了类的行为应有哪些,类似C中的函数原型;功能的实现要在.m文件中实现。并且Objective-C中的继承语法是“类名:父类名”。
@implemention
实现部分中的方法分为:实例方法
和类方法
,实例方法要实例化对象后通过对象进行调用,实例方法允许调用实例方法和实例变量。以-
开头。
类方法:以+
开头,类方法可以调用类方法,但类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法。
方法名又称为选择器。
类的命名规范
类名要首字母大写,方法名首字母小写,方法名中其他单词首字母要大写,以提高程序的可读性。
创建和使用对象
//创建对象,完成对象的声明,内存分配,初始化
Student *stu = [[Student alloc] init];
或者
Student *stu2 = [Student new];
Objective-C创建对象的语法:
类名 *对象名= [[类名 alloc] init];
类名 *对象名= [类名 new];
Objective-C中给对象属性赋值:
stu1->name = @"张三";
stu1->age = 15;
赋值语法:
对象名->实例变量名 = 具体值;
Objective-C中的方法
消息传递模型(Message passing):是Objective-C中的核心机制,在Objective-C中,没有方法调用这种说法,只有消息传递。
//重写init方法
- (id)init{
if(self = [super init]){
name = @"李四";
age = 17;
}
return self;
}
其中,if(self = [super init]),此处的[super init]仍然返回子类对象,目的是为了初始化父类的实例变量。如果返回nil,说明父类没有alloc成功。
便利初始化函数
在使用对象的过程中,对象和对象的实例变量的值往往是不同的,所以我们需要在init方法时传入个性化的数据,在框架类库中的一些类里有一系列的以init开头的方法,这些方法就是便利初始化函数。
在.h文件里声明便利初始化函数
- (id)initWithName:(NSString *)aName andAge:(int)anAge;
在.m文件里实现便利初始化函数
- (id)initWithName:(NSString *)aName andAge:(int)anAge{
if (self = [super init]) {
name = [aName copy];
age = anAge;
}
return self;
}
便利构造器。
上面的便利初始化函数创建对象首先还是要调用alloc方法对对象分配内存空间,然后再初始化对象,代码还是非常繁琐。于是在Cocoa中,有些方法通过吧内存分配过程和初始化过程组合起来完成对象的创建,这种方法称为--便利构造器。它们都是类方法。
在.h文件里声明便利初始化函数
+ (id)initWithName:(NSString *)aName andAge:(int)anAge;
在.m文件里实现便利初始化函数
//便利构造器
+ (id)initWithName:(NSString *)aName andAge:(int)anAge{
Student *student = [[Student alloc] initWithName:aName andAge:anAge];
return student;
}