类的设计
c语言是面向过程的编程语言,c语言中的代码是"祈使句",强调的是存储数据,管理数据,程序员通过写代码操作cpu进行数据存储,数据管理
oc语言是面向对象的编程语言,oc语言的代码是强调主语的语言.oc程序中,会添加很多可以接收消息的单元(对象),每个单元具有一个单独的功能,这些单元相互配合,完成一个完整的应用程序
oc语言(objective-c)是ios应用开发的核心语言
[oc的用途]
oc语言可以用来编写mac os操作系统
oc语言可以用来编写基于mac os系统的应用程序
oc语言可以用来编写ios操作系统
oc语言可以用来编写基于ios操作系统的应用程序
同样是面向对象的语言有c++,java,oc
公认的第一个面向对象的程序设计语言是 simula 67 语言,而c++就是基于 simula 67 诞生的新的面向对象的语言
公认的第二个面向对象的程序设计语言是 smalltalk 语言,而oc,java就是基于 smalltalk 诞生的新的面向对象的语言
区别:
[继承性]
c++,支持多继承
oc,java只支持单继承
[动态性]
c++,静态语言.在编译期,编译器会做静态语法检查,静态编译,运行起来的程序安全性比较高
oc,动态语言.在程序运行期间可以根据字符串的内容决定调用哪个方法,加载哪个类,运行起来的oc程序灵活性较高
一.类和对象
通过上面的了解,知道oc程序中充斥着各种各样的对象,而这些对象都要由对应的类来创建
什么是类?什么是对象?类和对象的关系?
[从生活角度看]
类 对象
人 你,我
书 你桌上的那本书,我桌上的那本书
球 你家的那个篮球,我家的那个篮球
机器人 R2-D2,BB8
[从代码角度看]
[创建oc工程]
工程名:可以是中文,但是如果后期创建ios的工程,工程名必须是英文,因为ios工程使用中文工程名会产生一些无法预 料的错误
语言类型:选择Foundation或者Objective-c
[oc工程的特点]
#import <Foundation/Foundation.h>
<1>自动包含Foundation.h头文件,Foundation.h文件写有常用的绝大部分头文件的包含语句
<2>使用#import指令来包含Foundation.h头文件
oc语言的程序是基于Foundation框架的,Foundation框架是oc的基础框架,脱离Foundation框架几乎无法写出一个 完整的ios应用程序
import,可以保证被包含的头文件只被包含一次
<3>oc默认的源代码文件是.m结尾的文件
<4>oc特有的打印语句,和oc特有的字符串
NSLog(@"Hello, World!");
oc中打印字符串,使用NSLog函数
oc中字符串,都是@开头的字符串(c中的字符串在oc中依然可以使用)
[注] oc语言是完全兼容于c语言的
<5>NSLog打印字符串,带有特殊的日志字符串
二.类的创建
c语言的结构体和oc语言的类非常相似
oc中为了描述一个事物,使用类来实现
c中的结构体:负责存储数据
c中的函数:负责管理数据
oc中的类,就是c中的结构体和函数的结合,既负责存储数据,又负责管理数据
//Person是我们创建的类的名字 //:表示继承关系 //NSObject是Person类的父类 //在oc语言中,NSObject类是所有其他类的直接/间接的父类 @interface Person : NSObject { //年龄 int age; //身高 int height; //名字 char name[20]; } //oc中的函数一般称为“方法”method //oc中的方法,分两类:对象方法 和 类方法 //对象方法,减号(-)开头的方法,必须由对象进行调用 //类方法,加号(+)开头的方法,必须由类名进行调用 //吃饭 - (void)eat; //睡觉 - (void)sleep; @end
通过File -> New -> File,使用模板创建的类都会自动生成.h和.m文件
[类的.h文件] 类的声明,类的声明关键字:interface
<1>添加成员变量
<2>添加成员方法(方法的声明)
[注] 类的声明,是由 成员变量 + 成员方法声明 构成
[类的.m文件] 类的实现(具体指 方法的实现),类的实现关键字:implementation
一个类一旦创建成功,就可以使用类名来创建对象
三.对象的创建
//创建对象方法一: Person *liyifeng=[Person alloc];//在堆区创建对象 liyifeng=[liyifeng init];//给堆区的对象初始化 //创建对象方法二: Person *linzhiling=[[Person alloc] init];//创建对象的同时给堆区初始化
四.方法的调用
//oc中的函数一般称为“方法”method
//oc中的方法,分两类:对象方法 和 类方法
//对象方法,减号(-)开头的方法,必须由对象进行调用
//类方法,加号(+)开头的方法,必须由类名进行调用
调用类的方法必须用[]的方式
[liyifeng eat];
[注] 在同一个类的.h和.m文件中相互切换,ctrl+win+⬆️/⬇️
[注] 在一个类的所有对象方法(减号方法)中,都可以直接使用成员变量
一旦某个对象调用了对象方法,这个对象方法内部使用到的这些成员变量一定是属于这个对象的
[ self 和 super ]
-(id)init { if (self=[super init]) { //给当前对象的成员变量赋值(初始化) age = 10; height = 1.7; strcpy(name, "liyifeng"); } return self; }
[注] self,代表当前对象(谁调用这个方法,self就代表谁)
[注] super,super关键字用来调用父类的方法