//

//  main.m

//  13 - 对象的存储细节

//

//  Created by vic fan on 16/7/9.

//  Copyright © 2016年 李洪强. All rights reserved.

//

#import <Foundation/Foundation.h>

问题 1 :

[person new]

做了哪三件事情?

1 申请了内存空间

2 初始化类中的实例变量

3 返回对象的内存地址

问题 2 :

[person new] 创建的对象在内存的哪个区?

堆区

问题 3: 实例变量存储在内存的哪个区

实例变量存储在内存的堆区      指针p存储在栈区

问题 4  [p run] 是怎么调用的?

先去找堆区的对象,再去找isa指针,有了isa指针,才能找到

代码区的类(Person),找类中所存贮的方法.

isa 指针是对象中的隐藏指针,指向创建这个对象的类

--------------------------------

分析:

Person *p = [Person new];

等号左边:

Person类   程序会在3代码区开闭一块内存

定义一个指针: 在栈区(P指针是局部变量)

等号右边:

1 在堆区申请内存空间

2  初始化实例变量

1栈区          2堆区  ----->    3代码区  内存地址: ox111

person类中的所有代码

P指针           isa指针          实例变量:

_name = null    _name;

_age = 0       _age;

方法:

_run{

}

并没有开辟内存

发送一个消息就是调用方法

底层是C语言的,在调用一个函数 obj_msgsend

一个类可以创建多个对象,但是每个对象的地址不是相同的

*/

@interface Person : NSObject{

@public

//定义实例变量

NSString *_name;//姓名

int _age;//年龄

}

//方法的声明;

- (void)run;//人跑的方法的声明

@end

//类的实现

@implementation Person

//方法的实现

- (void)run{

NSLog(@"周杰伦的床边故事");

}

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

Person *p = [Person new];

p->_age = 12;

p->_name = @"李洪强";

//调用方法

[p run];

}

return 0;

}

李洪强iOS开发之OC[014] -对象的存储细节的更多相关文章

  1. 李洪强iOS开发之OC[018]对象和方法之间的关系

    // //  main.m //  18 - 对象和方法之间的关系 // //  Created by vic fan on 16/7/14. //  Copyright © 2016年 李洪强. A ...

  2. 李洪强iOS开发之OC[003] - 用钥匙串存储信息模拟登陆

  3. 李洪强iOS开发之OC常见错误汇总

    // //  main.m //  16 - 常见错误汇总 // //  Created by vic fan on 16/7/13. //  Copyright © 2016年 李洪强. All r ...

  4. 李洪强iOS开发之OC[017]函数和方法的区别

    // //  main.m //  15 - 函数和对象的方法的区别 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. ...

  5. 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量

    // //  main.m //  07 - 创建一个对象并且访问实例变量 // //  Created by vic fan on 16/7/3. //  Copyright © 2016年 李洪强 ...

  6. 李洪强iOS开发之OC[010] - 有参方法的声明实现和调用

    // //  main.m //  09 - 有参方法的声明实现和调用 // //  Created by vic fan on 16/7/5. //  Copyright © 2016年 李洪强. ...

  7. 李洪强iOS开发之OC[015]#pragma mark的使用

    // //  main.m //  14 - #pragma mark的使用 // //  Created by vic fan on 16/7/10. //  Copyright © 2016年 李 ...

  8. 李洪强iOS开发之OC[013] -类的创建的练习

    // //  main.m //  12 - 类的创建练习 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All ri ...

  9. 李洪强iOS开发之OC[012] -类的声明实现小结

    // //  main.m //  11 - 内容总结 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All righ ...

随机推荐

  1. struts2 type="redirect"源码解析

    首先解释一下几个名词: request.getRequestDispatcher()是请求转发,前后页面共享一个request ; response.sendRedirect()是重新定向,前后页面不 ...

  2. [大牛翻译系列]Hadoop(7)MapReduce:抽样(Sampling)

    4.3 抽样(Sampling) 用基于MapReduce的程序来处理TB级的数据集,要花费的时间可能是数以小时计.仅仅是优化代码是很难达到良好的效果. 在开发和调试代码的时候,没有必要处理整个数据集 ...

  3. Scrapy源码学习(二)

    上次说到scrapy_home/scrapy/commands包下每个模块对应了scrapy命令行中的一个命令,他们都继承自command.py模块中ScrapyCommand这个类,这次就来简单看一 ...

  4. VirtrualBox 搭建本地lamp环境

    1.VirtrualBox安装Centos6.8 minimal VirtrualBox新建个虚拟机配置好内存以及硬盘大小,安装即可: 网络方式是 NAT(默认)和桥接方式来实现,最好在安装前设置好, ...

  5. JAVA四种线程池实例

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗?   Java   1 2 3 4 5 6 7 new Thread(new Runnable() {        ...

  6. selenium for python 所有方法

    先列出selenium所有方法,然后挨个使用!说明 add_cookieapplication_cachebackcapabilitiesclosecommand_executorcreate_web ...

  7. mysql导入的时候提示“1046-No Database selected”的解决办法

    进入phpmyadmin后,先点击左边的要导入的数据库,进入后再点击右上角的“导入‘按钮即可 详细说明 http://www.xmxwl.net/help/member/20160325/13653. ...

  8. JAVA的字节码技术

    1.什么是字节码? 字节码 byteCode JVM能够解释执行的.java程序的归宿,但是从规范上来讲和Java已没有任何关系了.一些动态语言也可以编译成字节码在JVM上运行.字节码就相当于JVM上 ...

  9. .Net码农学Android---前言

    自从毕业参加工作后,就一直想学移动领域得开发,但时间.精力.决心.学习成本等这些问题总在不同程度的阻碍着自己. 但这段时间自己想做一款属于自己的App的想法越来越强烈,我感到自己快压不住这股能量了.终 ...

  10. mysql学习笔记之基础篇

    数据库学习之基础篇 ① 开放数据库互连(Open Database Connectivity,ODBC ② 结构化查询语言(Structured Query Language) ③ 进入mysql:M ...