OC基础--->类 和 对象

--------->实例1、类的 特征、方法 的声明和实现<----------

A--->Teacher 为自定义类名 :command + n 选择Cocoa Touch Class

B--->NSObject 为父类名 :为Foundation框架下的一个根类( 即没有父类 )

@interface Teacher : NSObject

{

C--->声明Teacher类创建的对象拥有的实例变量

       1)、"_"是 官方 推荐的写法,以便于区分

       2)类型名 “*”_ 实例变量名   表示创建的是对应类型的指针

NSString *_name;

NSString *_gender;

NSInteger  _age;

}

//D--->方法的声明 : 1)、类似于C的函数 

                               2)、“-”表示对象方法,只有对象可以调用

- (void)teaching; 

- (void)getSalary;


@impementation Teacher

- (void)teaching{

NSLog(@"我正在进行教学活动");

}

-(void)getSalary{

NSLog(@"这个月发的不少,可以吃大餐了");

}

@end

E--->创建一个类--->OS X -->Sourse-->CocoaClass &Next--->(Class):Teacher; ( SubClass of ) NSObject;

(Language):Objective-C --->Teacher.h &Teacher.m

F--->1、类的定义过程需要进行分文件放置。文件分为 .h  (接口文件) 和 .m (实现文件)。

2、1)要使用类名命名文件。 2).h 文件管理类的接口部分; .m 文件管理类的实现部分

3、只要符合类的接口部分和类的实现部分的定义,就可以定义出一个类

4、文件中可以定义出多个类,但是文件的名字以类名命名。所以不提倡使用这中方式。 例如: Person文件中定义一个 Dog 类

G--->1、类是一个抽象的概念,在实际开发中程序的运行是通过对象间的相互协作来完成。

2、对象是类的实例,通过类来创建对象

3、创建对象步骤:1)、分配内存空间:根据类中声明的实例变量为对象在  堆区  分配内存,并返回首地址 2) 初始化:为对象的实例变量设置初始值

H---> 1) 、对象的创建: 分配内存空间,并且将内存空间数据清0

Teacher *teacher = [Teacher alloc]

teacher = [teacher init];

2)、Teacher *teacher = [[Teacher alloc]init];

I--->开辟空间

1)  +(instancetype)alloc;1)、“+” 表示方法是类方法,只能由类调用。 instancetype 返回值类型,可以用 id (任意对象类型)替代

2)初始化 -  ( instancetype ) init ; "-" 对象方法, 对象调用。 “instancetype” 返回值类型

J ---> instancetype 和 id 的区别

1)instancetype 可以返回和方法所在类相同类型的对象, id 只能返回未知类型的对象

2) instancetype 只能作为返回值和参数, id 还可以用来定义变量

3)instancetype 会告诉编译器当前的类型,但 id 对于编译器却是无类型的,调用任何方法不会给出错误提示。

4)对于 init 方法,id 和 instancetype 是没有区别的。因为编译器会把 id 优化成 instancetype 。当明确返回的类型就是当前 Class 时,使用 instancetype 能避免 id 带来的编译不出的错误情况

J ----> 对象的创建

Teacher *teacher = [ [ Teacher alloc ] init ];

1) teacher 对象是一个指针 ,存储对象的首地址,代指对象

2)真正的对象在堆区空间 :_name _gender _age ...

K ---- > 对实例变量的操作

1)实例变量在初始化时只做少量设置,如果在程序运行过程中需要设置,我们需要对实例变量进行@public修饰

2)@public 实例变量访问修饰符 (共有)。被其修饰的实力变量外界可以通过  对象 ->实例变量  访问并且修改

L ----> 三种可见度的区别

                     本类                       子类                       其他类  

@public    可以直接访问        可以直接访问        可以直接访问   

                实例变量                实例变量               实例变量

@private    可以直接访问     不可以直接访问    不可以直接访问

                  实例变量          实例变量              实例变量

@prectected 可以直接访问    可以直接访问     不可以直接访问

                    实例变量          实例变量          实例变量

1)实例变量默认可见度 @protected, 外界无法访问

M ----> OC 中的方法分为两种:类方法 ( + 号 )和实例方法 ( - 号 )

1)类方法:只能被雷使用,例如:+ ( instancetype )alloc;

类方法中不能使用实例变量。

2)实例方法:只能对象使用,例如 - ( instancetype )init;

N ---- > 方法的声明


OC基础--->类 和 对象_第1张图片

O ---- > 如何获取方法的方法名

删除 : 类型标识,返回类型,参数类型,参数名,空格

上面的方法名为 : replaceObjectAtIndex:WithObject:

1)一个类中不能出现同名方法

2)“ : ” 标识参数,不能省略。有冒号必须有参数。

3)冒号属于方法名的一部分

P ---- > 方法的声明

声明一个多参数的方法

- (void)setName : ( NSString *) name  gender : ( NSString * ) gender  age : ( NSUInteger ) age;


Q ---- > 方法的使用

在 OC 中使用消息发送机制 : [receiver message]

[ teacher  getSalary ];

1) 给 teacher 对象发送 getSalary 消息

2)teacher 接收到消息, 即方法 getSalary 

3) teacher 找到 getSalary 方法, 并执行

L ---- > setter 和 setter 方法

1)在 OC 里, 为  单一  实例变量赋值的方法称作setter (设置器)

2)获取单一实例变量值得方法称作 getter (访问器)

L ---- > setter 和 getter 方法的书写格式

1)OC 中规定了 setter 和 getter 方法的书写格式

比如:实例变量 NSUInteger _age

setter 的书写格式: - (void)setAge : (NSUInteger)age;

即 set + 首字母大写的实例变量名 (忽略下划线)

getter的书写格式: - (NSUInteger)age;

即返回值类型与变量类型一致,方法名与实例变量名相同(忽略下划线)

R ---- > setter 与 getter 同实例变量的关系

1)无论 setter 和getter 内部操作的是实例变量

2)每一个实例变量都需要一对 setter 和 getter 方法


S-------->小结

1)面对对象和面对过程的区别:两种不同的编程思想,思考角度不同 : 前者以对象为中心,后者以事件为中心

2)类是对象的抽象,对象是类的实例。 面对对象编程:县穿件对应的类,再由类生成对象,完成开发

3)类包含接口和实现两部分。对象创建分两步:创建对象,初始化。

4)实例变量三种可见度:@public\@protected\@private

5)方法是 OC 的核心 ,采用消息机制【receiver message】

6)"-" message 由对象来调用; “+” message 由类来调用

7)setter 和 getter 方法 访问的是单一实例变量

你可能感兴趣的:(OC基础--->类 和 对象)