类和对象是⾯面向对象的核⼼心。
定义类,创建对象,使⽤用对象。
类:具有相同特征和⾏行为的事物的抽象。
⾯面向对象编程中使⽤用对象完成程序
开发中:先定义类,再创建对象,然后使⽤用对象。
定义类包含两部分:接⼝口部分(.h)和实现部分(.m)。分开写。
1. 接⼝口部分:对外声明类的特征和⾏行为。(类似于说明书)
2. 实现部分:对内实现⾏行为。(内部的具体实现)
接⼝口部分标志:@[email protected]作⽤用:声明类的实例变量和⽅方法,即特征和⾏行为。
包含内容:类名、⽗父类名、实例变量、⽅方法等。
实现部分标志:@[email protected]作⽤用:实现⽅方法,即实现类的⾏行为。
类是模板,对象是具体表现,任何对象都要占⽤用内存空间.创建对象分两步:分配内存空间和初始化。
分配内存空间:根据类中声明的实例变量为对象分配内存,将所有实例变量置为默认值0,并返回⾸首地址。
初始化:为对象的实例变量设置初始值。
创建对象:
分配内存空间:Person * p = [Person alloc];
初始化:p = [p init];通常这两部操作需要连写:
Person * p = [[Person alloc] init];
+ (id)alloc; +表⽰示这个⽅方法属于类,只能类执⾏行。id返回值类型,表⽰示任意类型的对象,即创建好的对象。
- (id)init; -表⽰示这个⽅方法属于对象,只能对象执⾏行。id返回值类型,表⽰示初始化完成的对象。
指针存储对象的⾸首地址,代指对象。OC中使⽤用指针代指对象,进⾏行操作。
Person * p = [Person alloc];
先执⾏行“=”右侧1. [Person alloc]返回值是对象的⾸首地址,即对象。2. p是跟对象同类型的指针变量,存储对象⾸首地址,代指对象。
OC的基本类型: 整形 NSInteger(该类型为长整形,输出用%ld), 浮点型: CGFloat, 字符型: NSString(字符型一般都用指针来接收)
NSLog为输出函数,与printf相似,但NSLog能自动换行
.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
// 特征(成员变量)
{
@public
//成员变量
//基本数据类型,比如NSInteger,CGFloat修饰的成员变量不加*
NSString *_stuName;
NSInteger _stuAge;
CGFloat _stuScore;
NSString *_stuHobby;
NSString *_stuSex;
}
//行为
//方法的声明
//打招呼
- (void)sayHi;
//玩
- (void)play;
@end
.m
#import "Student.h"
// .m是实现文件,用来实现方法的
@implementation Student
//打招呼
- (void)sayHi
{
// NSLog(@"大家好~");
//方法(行为)的实现
//打印对象的所有的成员变量
NSLog(@"%@",_stuName);
}
@end
结束
.h文件称为接口文件, .m是实现文件,用来实现方法的,他们都以@end 结束.
Student是当前类的类名
类名和文件名可以不一样,但是为了方便管理,让类名和文件名相同
一个文件里只有一个类(一个文件可以定义多个类,但为了方便管理,只定义一个类)
冒号后面的NSObject是当前类的父类,继承与NSObject
NSObject为根类,它没有父类,类似于上帝
在main函数里
// 创建对象
// 第一步操作:开辟堆区的内存空间
Student *stu = [Studentalloc];
NSLog(@"%p", stu);
// 第二部:进行初始化设置
stu = [stuinit];
// 通常把创建对象的两步和在一起写
Student *stu = [[Student alloc] init];
Student继承NSObject,所以Student可以使用NSObject里所有的行为,所以可以直接使用alloc和init这两种方法
//访问成员
stu->_stuName =@"king";
stu->_stuAge = 23;
NSLog(@"%@", stu->_stuName);
NSLog(@"%ld", stu->_stuAge);
//调用方法
[stusayHi];
[stuplay];
//哪个对象来调用sayHi方法,就会打印哪个对象的成员变量的内容
stu->_stuName =@"king";
[stusayHi];
在.m文件
//init已在NSObject声明,不用再.h里声明
//重写初始化方法
- (id)init
{
_stuName = @"queen";
_stuAge = 22;
_stuHobby = @"玩";
_stuSex = @"女";
_stuScore = 100;
return self;//返回自己
}
@public公开的,被public修饰的成员变量谁都可以进行使用
@protected是被保护的,如果没有指定可见度,默认是被保护的
他的使用范围被限制在本类和它的子类可以使用
@private 私有的,只有本类可以使用
@package是系统内部使用的成员变量,我们在外部不能使用,所以以后看系统的头文件的时候,如果遇见了@package,直接无视
总结:
面向对象和面向过程是两种不同的编程思想,思考⾓角度不同,前者以
对象为中⼼心,后者以事件为中⼼心。
类是对象的抽象,对象是类的体现。面向对象编程中,先创建出对应
的类,再由类⽣成对象,进⽽完成我们的开发。
类包含接口和实现两个部分,对象创建分两步:创建对象、初始化。public修饰的实例变量,可以直接使用“—>”访问