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语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- 1085 Perfect Sequence (25 分)
Given a sequence of positive integers and another positive integer p. The sequence is said to be a p ...
- playbackRate控制音频播放倍速
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 剑指offer——51丑数
题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. / ...
- 设置单网卡双ip
环境如下: [root@localhost ~]# cat /etc/redhat-releaseCentOS Linux release 7.7.1908 (Core) 安装时选择的最小化安装 -- ...
- angularJS 上传multipart/form-data
var fd = new FormData();fd.append('file', vm.file);CommodityViewImport.post(fd, onSaveSuccess, onSav ...
- layui的选项卡(tab)的问题
当页面打开单个tab时,操作栏显示: 当页面打开多个tab时,会发现操作栏与下面第一个tab显示的操作栏类型一样,并且操作栏的按钮无作用 第一个标签操作栏显示: 产生这样的原因:使用layui时,每个 ...
- 屏幕操作录制成gif图的技巧
我呢,在记录一些做过得实例的时候,总需要上一两张效果图,截静态图太浪费时间了,于是就找了一些录制git图的软件 一.Gif动画录制工具 这是我在360软件中心下载的,用了一下,不好用,录制出来的图是黑 ...
- htons(), ntohl(), ntohs(),htons()这4个函数(摘)
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数.网络字节顺序与本地字节顺序之间的转换 ...
- add a characteristic in enovia PLM
Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...
- xpdf -Portable Document Format(PDF)文件阅读器
总览 xpdf [选项] [PDF文件 [page]] 描述 Xpdf是一个 Portable Document Format(PDF) 文件阅读软件.(PDF文件也经常被称为Acrobat 文件,这 ...