一、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;
}
@end
10> 方法的声明与实现
注意事项:
11> 关于苹果开发帮助文档的安装:
方法一: 找到运用程序Xcode -- /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
方法儿: 方法硬盘的某个路径下面,也是可以