面向对象

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

常见的概念:

* 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. jQuery 封装的ajax

    jquery封装的ajax 具体操作: $.get(url  [,data]  [,fn回调函数]   [, dataType]); data:给服务器传递的数据,请求字符串 .json对象 都可以设 ...

  2. hibernate基本配置优化

    前面已经说过hibernate的基本配置了,现在对之前的基本配置进行代码优化: 写一个读取配置工具 package tool; import org.hibernate.Session; import ...

  3. 机器学习技法笔记:Homework #7 Decision Tree&Random Forest相关习题

    原文地址:https://www.jianshu.com/p/7ff6fd6fc99f 问题描述 程序实现 13-15 # coding:utf-8 # decision_tree.py import ...

  4. Python 内置函数&filter()&map()&reduce()&sorted()

    常用内置函数 Python 2.x 返回列表,Python 3.x 返回迭代器 在进行筛选或映射时,输出的结果是一个数组,需要list帮助. 如:print(list(map(lambda x:x+1 ...

  5. 推荐20个让你学习并精通CSS的网站

    1. A List Apart CSS Topics A List Apart,学习网页设计和最佳实践的首选网站.这个网站从1999年就开始发表关于CSS的文章,其中大部分文章都是面向那些更注重符合标 ...

  6. 函数隐藏参数 — this

    解析器在调用函数每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this this指向的是一个对象,这个对象我们成为函数执行的上下文对象 根据函数的调用方式不用,this会指向不同的对象: 1 ...

  7. tomcat启动内存修改

    #   USE_NOHUP       (Optional) If set to the string true the start command will #                   ...

  8. shell实现批量创建交叉编译工具软链接

    在学习嵌入式过程中,常常用到交叉编译工具,而原本的交叉工具链比较长,不利于记忆以及使用, 解压后的交叉编译工具链如下图所示 为了更好的使用交叉编译工具与其他开发者保持一致,经常需要用到软链接. NAM ...

  9. quartz的使用(一)

    1.quartz是什么? Quartz 是一个完全由 Java 编写的开源作业调度框架,支持各种灵活的应用方式,并同时支持分布式和集群能力.2.quartz的基本要素 2.quartz的基本要素 Sc ...

  10. NX二次开发-UFUN获取当前所在的模块UF_ask_application_module

    NX9+VS2012 #include <uf.h> #include <NXOpen/UI.hxx> #include <NXOpen/MenuBar_MenuBarM ...