//

//  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. WPF 绑定四(层级绑定)

    xaml: <Window x:Class="WpfApplication1.Window4" xmlns="http://schemas.microsoft.co ...

  2. java 高精度

    package BigDecimal; import java.math.BigDecimal; import java.lang.Object; public class BigDecimalTes ...

  3. 最强Android模拟器genymotion的安装与配置

    Android开发人员都知道,原生的模拟器启动比较慢,操作起来也不流畅,还会出现莫名的问题.当然很多人都会选择直接使用android手机来开发,但是有时候需要在投影仪上演示程序的时候手机不太好做到吧. ...

  4. MySQL 5.7.11 重置root密码

    .修改/etc/my.conf,添加参数skip-grant-tables .重启mysql service mysqld stop service mysqld start .用root 直接登录 ...

  5. cadence PCB绘制步骤

    1 创建一个PCB文件  file -> new 2 创建一个板框  add -> line ,在 options 选型中选择好,板框为 长 4400mil 宽 3200 3 给PCB板框 ...

  6. nginx服务器绑定域名和设置根目录

    首先进入nginx安装目录的配置目录conf,然后执行 vi conf/nginx.conf 打开nginx的配置文件,找到并修改红字部分 server { listen default_server ...

  7. 无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突

    无法解决 equal to 运算中 "Chinese_PRC_BIN" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突.问题如下图: 执行一下语 ...

  8. jetty 8.x, 9.x无法加载jstl的PWC6188问题

    参考: cannot load JSTL taglib within embedded Jetty server:http://stackoverflow.com/questions/2151075/ ...

  9. STL算法

    STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...

  10. advance 模板 怎么生成module

    advance 模板 怎么生成module namespace写什么如果是前台呢就是 frontend\modules\modulename\Module@我叫红领巾 module id有什么用bak ...