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语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- 将本地已有的一个项目上传到新建的git仓库的方法
将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...
- java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
问题:Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationCont ...
- Ubuntu12.04下Encountered a section with no Package: header错误解决方案
刚刚想在Ubuntu12.04下安装几个软件,sudo apt-get install libsqlite3-dev automake scratchbox2,没成想出现下面的错误: ...
- sed命令详解 (转载)
sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...
- 初探Javascript魅力(1)
转自:CSDN--http://blog.csdn.net/cherry_vicent/article/details/42120149 1.javascript是什么 根据用户的一些操作,然后来 ...
- 转: Meshlab简介
本文翻译自Meshlab主页:http://www.meshlab.net/ MeshLab是用于处理和编辑3D三角形网格的开源系统.它提供了一组用于编辑,清理,修复,检查,渲染,纹理和转换网格的工具 ...
- 基于用户的协同过滤(UserCF)
- 标准 IO fread 与 fwrite 的使用(可以实现二进制流的读写)
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void ...
- day04 mysql单表查询 多表查询 pymysql的使用
day04 mysql pymysql 一.单表查询 1.having过滤 一般用作二次筛选 也可以用作一次筛选(残缺的: 只能筛选select里面 ...
- day02 mysql基本语句 存储引擎 数据类型 完整性约束
day02 mysql 一.sql的基本语句 系统数据库 information_schema: 虚拟库, 不占磁盘空间(在内存汇中): 存的是数据库启动后的一些参数, 如 ...