//

//  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. php多层数组与对象的转换实例代码

    通过json_decode(json_encode($object)可以将对象一次性转换为数组,但是object中遇到非utf-8编码的非ascii字符则会出现问题,比如gbk的中文,何况json_e ...

  2. js根据IP取得天气

    <span id="weather"></span> <script> function weather(cityName) { var cha ...

  3. JS遇到的问题解决

    1.input 里使用onclick事件,整整花了1个半小时,onclick里面直接用Location.href不需要加<script></script> <?php / ...

  4. smarty框架块函数

    块函数的形式是这样的:{func} .. {/func}.换句话说,它们被封闭在一个模板区域内,然后对该区域的内容进行操作.默认地,你的函数实现会被Smarty调用两次:一次是在开始标签,另一次是在闭 ...

  5. html和css中的技巧

    1:标签不要忘记带点 2:div是否成对的出现. 3.body 前面不能加点 4.在写css时记住一定要带上class的命名这样就不会出现重复的 5.出现文字的时候下面有下划线或虚线的时候,用padd ...

  6. 让CALayer的shadowPath跟随bounds一起做动画改变-b

    在iOS开发中,我们经常需要给视图添加阴影效果,最简单的方法就是通过设置CALayer的shadowColor.shadowOpacity.shadowOffset和shadowRadius这几个属性 ...

  7. 原生js实现仿window10系统日历效果

    舞动的灵魂版js日历,完全采用js实现,故而实现了与语言无关,jsp.asp.net php asp均可使用.无论你是开发软件,还是网站,均是不可或缺的实用代码. 该日历主要实现了获取当前时间时分秒, ...

  8. SQL Server备份事务日志结尾(Tail)

    原文:http://blog.csdn.net/tjvictor/article/details/5256906   事务日志结尾经常提交数据库未备份的事务日志内容.基本上,每一次你执行事务日志备份时 ...

  9. C++文件操作之 seekg/seekp/tellg/tellp

    问题描述: C++文件操作之 tellg/tellp/seekg/seekp 的使用 问题解决: (1)seekg/tellg/seekp/tellp 使用 tellp用于ostream调用,用来&q ...

  10. 网站常用css必备css reset

    在我们写前端代码页面的时候,很多常用的CSS类都是固定的!但没有一个标准或者大家都按自己的方式去随意的写,这样就每次都重复写一些固定的类! 为此HTML5 Doctor(HTML5医生)为我们总结了一 ...