OC开发系列-类与对象
面向对象
面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决。面向对象解决问题时首先要考虑需要找几个对象能解决这个问题。
常见的概念:
* 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开发系列-类与对象的更多相关文章
- OC第一节 —— 类和对象
一.类和对象的概念 1.1类 自己的定义: 具有相同或相似性质对象的抽象. 1.2 对象 自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机 等均可以看做是对象. 举例说明: 类 ...
- OC开发系列-内存管理
概述 移动设备的内存极其有限,每个app所有占用的内存是有限的.当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间. 任何集成了NSObject的对象都需要手动进行 ...
- OC学习5——类和对象
1.OC是在C语言基础上进行扩展得到的一门面向对象的程序设计语言,它也提供了定义类.成员变量和方法的基本功能.类可以被认为是一种自定义的数据类型,使用它可以定义变量,所有使用类定义的变量都是指针类型的 ...
- c#入门系列——类和对象的代码实现
面向对象 说起面向对象,大家因该都听说过,也知道是一个编程的方法,简称oop技术.它将对象的算法和数据结构看作一个整体,而一个程序就是由多个对象结合的整体.这样做可以提高代码的复用率,提高了软件的可维 ...
- java系列--类和对象
一.成员属性,构造方法,成员方法 1.类名首字母一般大写 2.方法名的首字母一般是小写,使用驼峰法(匈牙利法) myCry, 下划线法 my_cry 3.方法的声明没有函数体(接口,抽象类),数据类型 ...
- OC开发系列-@property和@synthesize
property和synthesize 创建一个Person类.提供成员属性的_age和_height的setter和getter方法. #import <Foundation/Foundati ...
- OC开发系列-成员变量的作用域
成员变量的作用域 OC中成员变量有四种作用域,同时每一种作用域对应着响应的关键字. * @private:自能在当前类的实现@implementation中访问 * @protected: 可以在当前 ...
- OC语言-01类和对象
// cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...
- ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- 3.4 redux 异步
在大多数的前端业务场景中,需要和后端产生异步交互,在本节中,将详细讲解 redux 中的异步方案以及一些异步第三方组件,内容有: redux 异步流 redux-thunk redux-promise ...
- 牛客 Fruit Ninja 2018 ACM 上海大都会赛 (随机化算法)
题目链接:Fruit Ninja 比赛链接:2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 题目描述 Fruit Ninja is a juicy action game enjoyed ...
- 寻找cookie之旅
公司接口自动化,需要用到cookie.这个cookie可以从login的响应header中取到. 直接用python调这个接口,返回的响应header是这个: {'Date': 'Thu, 15 Au ...
- 高级Java必看的10本书
1.深入理解Java虚拟机:JVM高级特性与最佳实践 本书共分为五大部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理. 2. ...
- 8.1_springboot2.x之Actuator应用监控
1.监管端点测试 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- 商城sku的选择功能--客户端
前段时间,刚好做到了有关sku这个功能.客户端的sku,和后台管理系统的sku.当初查了大量资料,遂做个记录,以免忘记. 这篇先写客户端的sku功能把,类似于去淘宝京东等购物,就会有个规格让你选择.如 ...
- 「CSP-S 2019」树的重心
题目 考场上送\(75pts\)真实良心,正解不难:考虑直接对于每一个点算割掉多少条边能使得这个点成为重心,不难发现对于一个不是重心的点,我们要割掉的那条边一定在那个大于\(\lfloor \frac ...
- creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
在creat-react-app搭建的项目环境中按需引入antd以及配置less,首先需要暴露出来webpack文件.(此操作不可逆). create-react-app myapp 创建同一个rea ...
- NFS 服务器的配置
1. 安装 NFS 服务器 [root@localhost btools]#rpm -q nfs-utils 如果没有安装,从对应 Linux 操作系统版本的安装光盘上找到 nfs-utils 的安装 ...
- 笔记55 Mybatis快速入门(六)
相关概念介绍(一) 1.日志 有时候需要打印日志,知道mybatis执行了什么样的SQL语句,以便进行调试.这时,就需要开启日志,而mybatis自身是没有带日志的,使用的都是第三方日志,这里介绍如何 ...