面向对象
面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决。面向对象解决问题时首先要考虑需要找几个对象能解决这个问题。
常见的概念:
* Object Oriented 面向对象 简称 OO
* Object Oriented Programming 面向对象编程 简称 OOP
要有对象那么就需要先有类。因为对象是基于类创建的。
OC类与对象
OC中的类是对对象的描述。完整的定义一个类包含两部分。
* 类的声明
* 类的实现
声明使用关键字@interface
声明一个类的属性跟行为。关键字@implementation
用来定义类的行为的实现。下面定义一个Car
类。
#import <Foundation/Foundation.h>
@interface Car : NSObject
{// 用来声明类的属性
@public
int wheels; // 轮胎个数
int speed; // 时速
}
- (void)run;
@end
@implementation Car
- (void)run
{
NSLog(@"车跑起来了....");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 实用类创建对象 [Car new] 返回对象。也可以说对象在内存中的地址
Car *c = [Car new]; // 这个时候内存中就有了一个对象Car对象
// OC中只能使用指针变量来修改内存中的对象属性
// 需要给属性添加@public 可以让外部的指针间接访问对象内部成员变量
c->wheels = 4;
c->speed = 250;
NSLog(@"wheels=%d, speed=%d", c->wheels, c->speed);
return 0;
}
执行[Car new]就是给Car这个类发送一条new消息。然后在内存中分配一块存储空间存放Car对象并且将创建的Car对象内存地址返回给Car类型的指针c。我们称c就是创建的Car对象。OC中只能使用指针变量来修改内存中的对象属性。此时的内存,如下图:
OC方法执行本质
我们编写的类在加载进内存首先为类分配存储空间创建该类的类对象
。每个类有且只有一个类对象
。一个类的对象方法列表存储在类对象中
。在OC中每一个对象内部都有一个isa指针指向所属类的类对象
。当向一个对象发送消息时的流程如下:
* 首先根据对象内部的isa指针找到该类的类对象
* 然后从类对象方法列表中找到对应的方法并执行
因此可见,一个类的所有实例共享方法代码。当对象方法执行时内部访问的成员为此时调用者的成员。self代表当前方法的调用者。