--------->实例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 ---- > 方法的声明
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 方法 访问的是单一实例变量