面向对象

面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决。面向对象解决问题时首先要考虑需要找几个对象能解决这个问题。

常见的概念:

* 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代表当前方法的调用者。

OC开发系列-类与对象的更多相关文章

  1. OC第一节 —— 类和对象

    一.类和对象的概念 1.1类 自己的定义: 具有相同或相似性质对象的抽象. 1.2 对象 自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机 等均可以看做是对象. 举例说明: 类 ...

  2. OC开发系列-内存管理

    概述 移动设备的内存极其有限,每个app所有占用的内存是有限的.当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间. 任何集成了NSObject的对象都需要手动进行 ...

  3. OC学习5——类和对象

    1.OC是在C语言基础上进行扩展得到的一门面向对象的程序设计语言,它也提供了定义类.成员变量和方法的基本功能.类可以被认为是一种自定义的数据类型,使用它可以定义变量,所有使用类定义的变量都是指针类型的 ...

  4. c#入门系列——类和对象的代码实现

    面向对象 说起面向对象,大家因该都听说过,也知道是一个编程的方法,简称oop技术.它将对象的算法和数据结构看作一个整体,而一个程序就是由多个对象结合的整体.这样做可以提高代码的复用率,提高了软件的可维 ...

  5. java系列--类和对象

    一.成员属性,构造方法,成员方法 1.类名首字母一般大写 2.方法名的首字母一般是小写,使用驼峰法(匈牙利法) myCry, 下划线法 my_cry 3.方法的声明没有函数体(接口,抽象类),数据类型 ...

  6. OC开发系列-@property和@synthesize

    property和synthesize 创建一个Person类.提供成员属性的_age和_height的setter和getter方法. #import <Foundation/Foundati ...

  7. OC开发系列-成员变量的作用域

    成员变量的作用域 OC中成员变量有四种作用域,同时每一种作用域对应着响应的关键字. * @private:自能在当前类的实现@implementation中访问 * @protected: 可以在当前 ...

  8. OC语言-01类和对象

    // cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...

  9. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

随机推荐

  1. 2.4 webpack + gulp 构建完整前端工作流

    在前面的两个小节中已经完整的讲了 webpack 和 gulp 相关的内容,本小节中将会结合二者构建一个完整的前端工作流,内容目录为: 前端工程结构和目标 前端工程目录结构 gulp clean gu ...

  2. java连连看小项目

    /* *本人也是刚入门,希望各位多多指教 *该项目主要代码在于连线 *1.2个连线没有拐弯 *2.2个连线有一个拐弯 *3.2个连线有2个拐弯 *采用递归算法 */ package llk; impo ...

  3. 伪类checked

    困惑了好久的复选框自定义样式终于有了谜底,原来就是一个 :checked 伪类 他的意思就是 匹配任意被勾选/选中的radio(单选按钮),chexked(复选框),或者option(select项) ...

  4. Shell 编程综合案例

    Shell编程综合案例 Shell也学习了大概的知识,现在这篇文章就大概讲述下如何使用shell编写一个脚本呢?下面就展示一个大家常用的数据库备份案例来进行展示. 需求分析 1)每天凌晨2:10分备份 ...

  5. Dubbo支持的注册中心有哪些?

    1.Dubbo协议(官方推荐协议) 优点: 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用) 缺点: 大文件上传时,可能出现问题(不使用Dubbo文件上 ...

  6. word embedding 精要整理

    word embedding 具体含义:词的实数向量化表示,可以通过向量相似性度量语义相似性,相似性原理是上下文的一致性 Embedding在数学上表示一个maping, f: X -> Y, ...

  7. 解决 java.lang.UnsupportedClassVersionError小记

    解决 java.lang.UnsupportedClassVersionError 错误原因是:编译的 class 文件的 jdk版本和运行这个 class 文件的jdk 版本不一致 比如:服务器运行 ...

  8. 在GitHub上编辑README.md排版样式

    如何在github的readme.md编辑出好看的样式排版文章呢...? 参考:https://blog.csdn.net/u012067966/article/details/50736647

  9. 微信小程序学习之navigate(1)navigateTo方法与navigateBack方法对于page生命周期不同的触发影响

    小程序的每个页面都有一些生命周期,每个生命周期由分别有着不同的生命周期钩子函数.而我们的业务逻辑写在这些生命周期的钩子函数中,那么弄清楚那种情形下会触发那些生命周期钩子函数就非常重要了 先上一段代码 ...

  10. Promise 解决同步请求问题

    在写小程序和vue项目中,由于 api 不提供 同步请求,因此,可以通过  Promise 来实现 同步请求操作 在这里 对于 Promise 不太了解的小伙伴 可以查找 Promise 的api 文 ...