iOS开发之oc(回顾笔记)(一)--类与对象(1)初认识
想要做iOS开发,OC语言是我们必须要学的,那么
要学习一门语言,我们首先得了解它。
【什么是OC】
objectiv-c 简称 OC,是一门基于C语言为基础编写而成的面向对象的语言。完全兼容C语言,可以在其代码中混入C语言代码,甚至是C++代码。
OC可以用来开发Mac OS X平台和iOS平台的应用程序。
(一)先了解一下面向过程和面向对象:
【面向过程】
1、面向过程的语言所有语句都是祈使句
2、面向过程的语言是数学逻辑的映射
3、面向过程语言的程序 = 数据 + 算法
C语言就是一门面向过程的语言,关注的是解决问题需要哪些步骤。
【面向对象】
1、对象作为接受消息的单位,不同的对象负责接收和处理数据的某个方面,不同对象协同完成功能
2、是生活逻辑的映射
3、程序 = 对象 + 消息
而oc就是面向对象的语言,关注的是解决问题需要哪些对象。
至于【哪种方法更好】---具体情况具体分析
提示:
>面向对象语言开发的步骤
1.根据需求设计类
2.利用类创建需要的对象
一个OC程序编写-->运行
>
/*方法一:
1.编写OC程序:.m源文件(在终端touch xxx.m 创建OC程序)
2.编译.m文件为.o目标文件:cc -c xxxx.m
3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation
4.执行a.out文件:./a.out
一步到位:
cc xxxx.m -framework Foundation
方法二:当然你也可以用Xcode(嘿嘿,就不那么苦逼了)
*/
(二)类与对象的初识
1.认识
类:具有对象的属性,是对对象的描述。
对象:类的实例化,看得见摸得着
武功的最高境界叫做“万物皆对象”。
2.
【从封装的角度】
【结构体】是对数据结构的封装
【函数】对处理数据的算法的封装
【类】 是对要处理的数据结构进行封装 同时对处理数据的算法做了封装
类 = 结构体 + 函数
【从编程语言的角度分析】
【类】它是一个自定义的类型 没有占用内存
【对象】某个类创建出来的变量 用类型定义的变量会占用内存
3.解决OC问题的步骤(核心思想)
第一:找到题目中所需要的对象
第二:列出对象的成员变量和成员方法
第三:根据找到的对象,创建相应的类
第四:用类创建出来对象
第五:给对象发消息,让对象完成相应的功能
4.设计一个类的3个步骤:
1).类名
2).属性
3).行为(动作\功能)
(三)类和对象---实战
类 = 属性数据封装(成员变量) + 方法(函数)封装
如何设计一个类
下面我们就来一步步的解剖上面这些代码
1、【头文件的引用】
#import <Foundation/Foundation.h>
#import "Cube.h"
<>表示导入系统的头文件
“”表示导入自定义的头文件
提示:#import作用跟#include一致,而且可以防止头文件的内容被包含多次
// 包含Foundation框架里面的NSObjCRuntime.h
// 应该包含Foundation框架的主头文件Foundation.h
2、类声明和实现
2.1、【类的声明】
代码示例
@interface Dog : NSObject { //属性数据封装在{ }以内 // 成员变量类型 成员变量名称; int _age; //属性成员名加_(成员变量) float _weight; } //封装方法 //最常用的方法 setter(设置)/getter(获取) //c函数语法:返回值类型 函数名(参数列表) //OC方法语法: // 方法类型 //- 对象的方法 //+ 类的方法 //方法类型 (返回值类型)部分方法名:(参数类型)参数名称1 部分变量名:(参数类型)参数名称2; // 多个参数 //setter / getter 方法主要是为了保护对象的数据安全 //成员变量的setter方法 -(void)setAge:(int)newage; // 对比函数 void setAge(int age) -(void)setWeight:(float)w; //成员变量的getter方法 -(int)age; // 对 -(int)getAge进行了优化,方法名与成员变量相对应 -(float)weight; //功能方法 -(void)run; -(void)bark; @end
代码说明
a.
【首行代码】
@interface 类名 : 父类名
1)用关键字@interface 声明一个类
2)interface 后面跟的是类名
3)冒号表示继承关系,后面跟的是父类
比如说你创建可Dog类
(: NSObject --让Dog这个类具备创建对象的能力)
b.
【成员变量】
成员变量(实例变量)声明在大括号之间,成员变量是在描述对象有什么.
c.
【成员方法】
1)无参 ,无返回值的成员方法
-(void)方法名;
2)带参数
-(void)方法名:(参数类型)形参;
3)带多个参数的方法
-(void)标签1:(参数1的类型)形参 and标签2:(参数2的类型)形参;
4)带返回值的方法
-(返回值类型)方法名;
【成员函数是描述对象可以做什么】
3、【类的实现】---也可以说是方法的实现
@implementation Dog //实现类方法关键字 类名 // 在这里进行方法的实现 (也就是写具体代码) // set方法的实现 -(void)setAge:(int)newage { _age = newage; } // get方法的实现 -(int)age { return _age; } //功能方法 -(void)run { NSLog(@"run....."); } @end
4、【对象的创建和使用】
1)创建对象
类名 *指针变量名 =[类名 alloc/new];
利用类的alloc/new方法创建一个新的对象(会在堆空间声明一块空间),并且把对象的地址返回左边的指针变量
(所以需要用该类类型的指针变量去接收)。
Dog * dog = [Dog alloc];
2)使用对象
1> 访问成员变量
指针变量名->成员变量名 = 具体数值;
c->speed = 100;(前提是在成员变量前写@public)
2> 让对象执行方法
[指针变量名 方法名];
[c run];
[指针变量名 部分方法名:实参1 部分方法名:实参2];
[c sumOfNum1:100 andNum2:200];
// 消息机制:给指针变量所指向的对象发送一条消息(消息名称就是方法名),让那个对象执行相应的方法(动态)
int main() { // 通过定义类指针变量引用实际对象 // 类实例化对象 alloc,在堆上申请空间 Dog * wangcai = [Dog alloc]; [wangcai setAge:5]; // 调用set方法设置属性 [wangcai setWeight:50]; int a = [wangcai age]; // 调用get方法取得值 float w = [wangcai weight]; // 给对象发消息[对象 方法]、或【对象 消息】 // 给指针变量wangcai指向的对象发送一条run消息 // 接收消息的那个对象,称为“消息接收者” [wangcai run]; [wangcai bark]; NSLog(@"a = %d w = %f",a,w); return 0; }
5、【方法的调用】
无参无返回值格式: [对象/类名 消息/方法/函数名]
无返回值 有参数: [对象/类名 消息/方法/函数名:参数]
有返回值的方法调用 返回值类型的变量 = [对象/类名 消息/方法/函数名]
/*
OC对象方法和函数的区别
1.函数属于整个文件,在文件的任意地方都能调用;对象方法只属于对象,只有对象才能调用对象方法
2.对象方法只能声明在@interface和@end之间,对象方法只能实现在@implementation和@end之间.
函数的声明和定义可以写在任意地方,函数不能归某个类所有,只属于某个文件
*/
补充:
》对象在内存中的存储情况
1.每一个对象都有自己的成员变量,每个对象的成员变量之间是独立,互不影响
2.每一个对象内部都有方法列表,方法的代码都的一样的
》 @implementation补充
其实,没有@interface,只有@implementation,也可以开发一个类,成员变量也可以声明在@implementation中,这是在Xcode4.2开始