博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC-面向对象
阅读量:4461 次
发布时间:2019-06-08

本文共 1782 字,大约阅读时间需要 5 分钟。

面向对象编程 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对于编译器却是无类型的,调用任何方法不会给出错误提示

 

转载于:https://www.cnblogs.com/scgazp/p/5214301.html

你可能感兴趣的文章
淀粉质(点分治) 学习笔记
查看>>
Jenkins api java 调用
查看>>
integer promotion
查看>>
C语言Linux服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现...
查看>>
图片预加载 解决图片加载闪动问题
查看>>
怎么处理系统蓝屏后提示代码0x000000d1的错误?
查看>>
技术分享:如何在PowerShell脚本中嵌入EXE文件
查看>>
ThreadUtil 多线程处理List,回调处理具体的任务
查看>>
DOM+Javascript一些实例
查看>>
我的软件工程之路(三)
查看>>
浅析C#中的Attribute
查看>>
深入理解Block
查看>>
20190325
查看>>
bzoj 2733 : [HNOI2012]永无乡 (线段树合并)
查看>>
NPOI新建和读取EXCEL
查看>>
【Spark】开发Spark选择Java还是Scala?
查看>>
【转载】String和StringBuffer的区别,以及StringBuffer的常用方法介绍
查看>>
下拉框选择效果的实现原理2
查看>>
第五周作业结对编程作业
查看>>
mysql tp5 find_in_set写法
查看>>