OC对象在内存中的存储位置

对象在内存中的存储

1. 内存中的五大区域.

栈: 存储 局部变量!!(连续的先进先出!).

堆: 允许程序员手动在 堆区申请指定的连续的字节数的空间来使用.

BSS段: 存储 未初始化 的全局变量、静态变量.

数据段(常量区):  存储已经初始化的 全局变量、静态变量、常量数据.

代码段:存储程序的 代码.

2. 类加载.

1). 当创建对象的时候,肯定需要访问这个类.因为只有访问了类才知道类中有那些成员.

2). 如果只是声明类指针的时候,也会访问这个类.以确定这个类型是否存在.

当类第一次被访问的时候,  会将类存储到代码段之中. 这个过程叫做类加载.

将类的代码存储在代码之中.

将类的代码以字符串的形式存储在代码段中.

只有类第1次被访问的时候,才会有类加载.

一旦类被加载到代码区.直到程序结束的时候才会被回收.

3.对象在内存中是如何存储的.

1). 类的本质是:自定义的数据类型.

HMPerson *p1 = [HMPerson new];

2). HMPerson *p1;

这句话,仅仅是声明了1个指针变量而已.这个指针变量的类型是HMPerson*.

p1是1个局部的变量.所以 p1指针变量是存储在栈区 的.

p1是1个指针变量,所以这个变量中只能存储地址.

本质上来讲.p1是1个指针变量 不是1个对象.

3).[HMPerson new];

这句话,才是在真正的创建对象.

new做的事情.

a. 在堆内存中申请一块合适大小的空间.

b. 在申请的这块空间中根据类的模板创建对象.

类中有哪些属性.就把类的属性依次的挨个的一个不落的声明在这个对象中.

对象中除了有类中定义的属性之外,还有1个属性叫做isa 这是1个指针.

这个isa指针指向 代码段!! 中的类.

c. 初始化对象的属性.为对象的属性赋默认值

-> 如果属性的类型是基本数据类型.就赋值为0

-> 如果属性的类型是C指针类型.就赋值为NULL

-> 如果属性的类型是OC指针类型.就赋值为nil

d. 返回这个对象在堆空间中的地址.

将这个地址赋值给p1指针.

p1指针指向了堆空间中的HMPerson对象.

4). 注意

a. 对象中只有类的属性+isa的指针. 没有方法.

isa指针指向了代码段中的类.

b. 如何访问对象的属性.

通过指针就可以找到指针指向的对象.找到对象了,就可以找到对象的属性.

p1->_name = @"jack";

c. 如何调用对象的方法?

[p1 sayHi];

通过p1指针找到对象,发现是在调用方法.那么再根据对象的isa指针找到代码段中的类.

再找到类中的对应的方法来执行.

d. 为什么方法不保存在对象中.

因为不管对象有多少个.方法的代码都是一样的.没有必要保存多份,只保存1份就可以了.

e. 相同类的对象的isa指针的值一定都是一样的.

4. 对象的属性的初始值.

创建1个对象 如果没有为这个对象的属性赋值.那么这个对象的属性是有值的.

属性的类型是基本数据类型:  0

OC指针:      nil

C指针:       NULL

Nil

1. C语言中学习的NULL.

a). NULL是1个值. 是C语言中指针变量的值.

b). 如果1个指针的值为NULL值,就代表这个指针不指向内存中的任何空间.

c). NULL本质上是1个宏.

define NULL ((void*)0)

所以 NULL 和 0 等价.

2. nil

a). nil也是1个值. 它也是1个指针变量的值.

b). nil的本质也是1个宏.

#define __DARWIN_NULL ((void *)0)

所以,nil和NULL完全是等价的.

c). 所以,如果

想要让1个指针不指向任何空间.

可以为这个指针变量赋值为NULL nil 0

3. 使用建议

a). 如果希望C指针不指向任何空间.一般为其赋值为NULL

b). 如果希望OC指针不指向任何空间,一般赋值nil

4. 注意问题

如果1个类指针的值为nil

HMPerson *p1 = nil;

代表p1指针不指向任何对象.

1). 所以这个时候 通过p1去访问p1指向的对象的属性的时候,肯定的会报错.

对象都没有 哪里来的属性呢?

2). 这个时候, 通过这个指针去调用方法的时候,

不会报错.也不会崩溃.

只是没有任何反应的啦.

分组导航标记

1. 一种快速的方式查找文件中的代码.

Xcode 提供了导航条可以快速查找.

2. 分组导航标记.

1). #pragma mark 标记名.

2). #pragma mark -  就会产生1条分割线.

3). #pragma mark - 标记名.  就会产生1条分割线.并取1个标记名.

方法与函数

1. 之前在C语言中叫做函数.

void test();

在OC类中定义的叫做方法.

- (void)sayHi;

2. 相同点:

1). 都封装1段代码,都表示1个相对独立的功能.

2). 函数/方法 如果不被调用,那么其中的代码是不会被执行.

3. 不同点.

1). 语法不同.

2). 定义的位置不一样.

a. 函数除了函数的内部和@interface的大括弧中不能定义.其他的地方都是可以定义的.

b. 而方法的声明只能在@interface的大括弧的外面,实现只能在@implementation中.

就算把函数写在类中,这个函数也不是属于这个类的.

3). 归属感不同.

a, 函数就像是1个没有家的孩子,每1个函数是孤立的.]

b. 方法是属于类的.类就是方法的家.

4). 调用形式不同.

a. 函数直接调用.

b. 方法必须要通过对象名来调用.

oc学习之对象在内存的位置的更多相关文章

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都 ...

JVM学习03_new对象的内存图讲解,以及引出static方法(转)

目录 -=-讲解对象创建过程中,-=-堆内存和栈内存的情况 -=-构造函数对类对象的成员变量的初始化过程 -=-构造函数出栈 -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决? -= ...

Java基础(2)面向对象和封装,对象的创建和使用、java对象的内存图

1 类和对象 类:是一类事物的描述,抽象的.猫 对象:是一类事物的实例,具体的.某只猫 2 类的定义 成员变量和成员方法 //定义一个学生类 public class Student { //成员变量 ...

OC学习10——内存管理

1.对于面向对象的语言,程序需要不断地创建对象.这些对象都是保存在堆内存中,而我们的指针变量中保存的是这些对象在堆内存中的地址,当该对象使用结束之后,指针变量指向其他对象或者指向nil时,这个对象将称 ...

OC学习5——类和对象

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

oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存 ...

ios开发:OC对象的内存分析

最近要开始准备找实习单位了,做做笔试题,看看各位大神的面试经历,发现自己要学习的东西真的还有很多,虽然也做过几个的项目,但是真正拿过笔试题一看,才发现自己对基础这方面的东西,确实有点忽视了,所以最近开 ...

OC学习6——面相对象的三大特性

我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息 ...

[javase学习笔记]-6.3 对象的内存体现

这一节我们来简单的看一看对象在内存中是什么样子呢,怎样体现. 我们以上一节的測试代码为例. 我们在函数的内存分配分析过.当该代码执行时,首先会载入主函数在栈内存中为main函数分配一个空间: 然后执行 ...

随机推荐

mysql中的行转列

//查看当前商品库存 function checkProductStock($product_id){ global $wpdb; $sql="SELECT post_id,max(if(( ...

redis 扩展 安装 和 memcached 安装

在Windows下为PHP5.6安装redis扩展和memcached扩展   一.php安装redis扩展   1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本       ...

EventBus初理解

缘由:     平时工作,因为懒于动笔的原因,也没注重技术和经验的积累,导致之前曾经研究过的问题现在又忘记了,所以要慢慢注重积累,那么就从写作开始,谈谈对工作中碰到的问题进行整理和归纳.     我们 ...

dedecms网站栏目增加缩略图的方法-测试通过

有时候因为网站功能需求,我们需要为织梦程序的栏目页添加缩略图功能,这里有一个栏目添加缩略图的方法,供大家参考 涉及到文件如下(注意备份): dede/catalog_add.php dede/cata ...

alibaba笔试

1.D  A(7,7)/(A(3,3)A(2,2)) = 420 关联: 字符串的排列和组合:http://blog.csdn.net/hackbuteer1/article/details/7462 ...

传输层:TCP UDP SCTP

总图 虽然协议族被称为“TCP/IP”,但除了TCP和IP这两个主要协议外,还有许多其他成员.图2-1展示了这些协议的概况. 图2-1中同时展示了IPV4和IPV6.从右向左看该图,最右边的5个网络应 ...

【python之旅】python的面向对象

一.面向过程 VS 面向对象 1.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,实现一个任务的 ...

ORM基础之ORM介绍和基础操作

一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...

flask、tornado、BaseHTTPServer性能简单对比

最近写了一个web应用,分别用flask.tornado.BaseHTTPServer都实现了一次,顺便就对比了一下三者的性能,本结果仅对本次测试负责(这句话很内涵,值得推广). 测试工具用了ab,时 ...

Velodyne VLP-16 gmapping 建图

1. 测试环境 Ubuntu 16.04 x64.ROS Kinetic.Velodyne VLP-16.RoboWare Studio 2. 安装 ROS 功能包 sudo apt-get inst ...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270