一、OC是面向对象的,C语言是面向过程的。面向对象和面向过程只是解决问题的两种不同思想。
1. 区别:面向过程关注的是解决问题需要哪些步骤,面向对象关注的是解决问题需要哪些对象;
2. 常用术语:面向对象 Object Oriented,简称OO; 面向对象编程 Object Oriented Programming,简称OOP;
二、类与对象的关系
1. 类的设计
1). 类名
2). 属性
3). 行为(功能)
2. 名词一般是类
如:小明在公交成上牵着一条叼着热狗的狗;
3. 拥有相同(或者类似)属性和行为的对象都可以抽象出一个类;
1> 类的声明与实现
2> 对象的创建
3> 成员变量的直接赋值
4> 对象的行为
5> 方法与成员变量
6> 对象的简单对象内存
例子:
#pragma mark 类的声明与实现 #import <Foundation/Foundation.h> // 类的声明 @interface Person : NSObject { @public int age; double weight; } - (void)walk; @end // 类的实现 @implementation Person - (void)walk { NSLog(@"%d岁、%f公斤的人走了一段距离", age, weight); } // main函数 @end int main() { Person *p = [Person new]; // oc中指向成员变量使用-> // .在oc中表示的是调用方法 p->age = 20; p->weight = 60.2; [p walk]; Person *p1 = [Person new]; // oc中指向成员变量使用-> p1->age = 30; p1->weight = 50.2; [p1 walk]; Person *p2 = p1; p2->age = 40; [p1 walk]; p = p1; p->age = 60; [p1 walk]; }命令执行文件:
shumeideiMac:~ shumei$ cc -c 类的申明.m
shumeideiMac:~ shumei$ cc 类的申明.m -framework Foundation
shumeideiMac:~ shumei$ ./a.out
2015-08-27 11:30:07.817 a.out[795:221158] 20岁、60.200000公斤的人走了一段距离
shumeideiMac:~ shumei$ ./a.out
2015-08-27 11:30:50.128 a.out[798:224307] 20岁、60.200000公斤的人走了一段距离
shumeideiMac:~ shumei$ cc 类的申明.m -framework Foundation
shumeideiMac:~ shumei$ ./a.out
2015-08-27 11:31:06.294 a.out[802:225249] 20岁、60.200000公斤的人走了一段距离
2015-08-27 11:31:06.295 a.out[802:225249] 30岁、50.200000公斤的人走了一段距离
shumeideiMac:~ shumei$ cc 类的申明.m -framework Foundation
shumeideiMac:~ shumei$ ./a.out
2015-08-27 11:40:21.404 a.out[845:267498] 20岁、60.200000公斤的人走了一段距离
2015-08-27 11:40:21.405 a.out[845:267498] 30岁、50.200000公斤的人走了一段距离
2015-08-27 11:40:21.405 a.out[845:267498] 40岁、50.200000公斤的人走了一段距离
2015-08-27 11:40:21.405 a.out[845:267498] 60岁、50.200000公斤的人走了一段距离
shumeideiMac:~ shumei$
图示解释:
7> 常见错误:只有类的声明,没有类的实现; 漏了@end;@interface和@implementation嵌套;两个类声明嵌套;成员变量没有写在括号里面;方法声明写在大括号里面;(类的实现可以写在main后面,主要声明写在前面就行了)
8> oc方法与函数的区别:
1. 对象方法都是以减号 - 开头;
2. 对象方法的声明必须写在@interface与@end之间,对象方法的实现必须写在@implementation和@end之间;
3. 对象方法只能由对象来调用;
4. 对象方法归类/对象所有;
5. 函数能写在文件中的任意位置(@interface与@end之间),函数归文件所有;
6. 函数调用不依赖于对象;
7. 函数内部不能直接通过成员变量名字访问某个对象的成员变量;
9> 类的合理设计
#pragma mark 类的合理设计 typedefn enum { // 注意枚举的使用适用情况 SexMan, SecWoman } Sex; typedef struct { // 注意结构体的使用适用情况 int year; int month; int day; } Date; #import <Foundation/Foundation.h> // 类的声明 @interface Person : NSObject { Sex sex; // 性别 Date birthday; // 生日 double weight; } @end10> 方法的声明与实现
注意事项:
11> 关于苹果开发帮助文档的安装:
方法一: 找到运用程序Xcode -- /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
方法儿: 方法硬盘的某个路径下面,也是可以