OC-面向对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC-面向对象相关的知识,希望对你有一定的参考价值。
面向对象编程 OOP(Object-Oriented Programming)
@interface Circle : NSObject {
ShapeColor fillColor;
ShapeRect bounds;
}
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end //Circle
在以上代码中的第一行代码如下
@interface Circle : NSObject
在Objective-C中只要看到@符号,就可以把它看成是对C语言的扩展。
@interface Circle告诉编辑器:“这是新类Circle的接口”
/*
@interface行中的NSObject告诉编译器,Circle类是基于NSObject类的,该语句表明每个Circle类都是一个NSObject,并且每个Circle类都将继承NSObject类定义的所有行为。
*/
声明完新类之后,我们将告诉编译器Circle对象需要的各种数据成员。
{
ShapeColor fillColor;
ShapeRect bounds;
}
在类声明中指定fillColor和bounds后,每次创建Circle对象,对象中都将包括这两个元素。因此,每个Circle类对象都将拥有自己的fillColor和bounds。fillColor和bounds的值称为Circle类的实例变量 (instance variable).
结尾处的花括号告诉编译器,我们为Circle类指定了实例变量
- (void) draw;
- (void)setFillColor: (ShapeColor) fillColor;
- (void)setBounds: (ShapeRect) bounds;
它们称为方法声明 (method declaration),
圆括号里面的是方法的返回类型。
- (void)setFillColor: (ShapeColor) fillColor;
- (void)setBounds: (ShapeRect) bounds;
Objective-C中有一种名为中缀符的语法技术,方法的名称及其参数都是在一起的,例如,你可以这样调用带一个参数的方法
[circle setFillColor: kRedColor];
带两个参数的方法调用如下所示:
[textThing setStringValue: @"hello there" color:kBlueColor];
setStringValue和color是参数的名称 @"hello there" 和 kBlueColor是被传递的参数。
"void"表明无返回值,":"则表示后面会出现参数
2. > 面向对象的核心是类和对象
类的定义分为两个部分: 接口部分和实现部分
接口部分:对外声明类的特征和行为
实现部分:行为的具体实现
类是一个抽象的概念,在实际开发中程序的运行是通过对象间的相互协作完成
对象是类的实例,通过类来创建对象
创建一个对象分为两个部分:
分配内存空间.>根据类中声明的实例变量为对象在堆区分配内存,并返回首地址
初始化.>为对象的实例变量设置初始值
Person *person = [[Person alloc] init];
以上代码包含了对象的创建与初始化
+ (instancetype)alloc;+表示类方法,只能由类来调用,instancetype返回值类型,可以用id类代替
- (instancetype)init; - 表示对象方法,对象调用,instancetype返回值类型
instanetype和 id 的区别:
instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象
instancetype只能作为返回值和参数,id还可以用来定义变量
instancetype 会告诉编译器当前的类型,但id对于编译器却是无类型的,调用任何方法不会给出错误提示
以上是关于OC-面向对象的主要内容,如果未能解决你的问题,请参考以下文章