A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zlc 中级黑马   /  2015-7-7 17:26  /  757 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

例子:
  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject
  3. {
  4.     @public
  5.     int _age;
  6.     float _weight;
  7.     NSString *_name;
  8. }
  9. //行为
  10. -(void)run;
  11. @end

  12. @implementation Person
  13. -(void)run{

  14.     NSLog(@"人正在跑");

  15. }

  16. @end

  17. int main(int argc, const char * argv[]) {
  18.     @autoreleasepool {
  19.         
  20.         //创建对象
  21.         Person *p = [Person new];
  22.         p->_name = @"柯南";
  23.         p->_age = 13;
  24.         
  25.         //_age 0
  26.         //_name null
  27.         
  28.         NSLog(@"姓名:%@,年龄:%d,体重:%f",p->_name,p->_age,p->_weight);
  29.         
  30.         [p run];
  31. }
  32. return 0;
  33. }
复制代码
1.我们知道[Person new] 做了3件事情
1) 申请内存空间
2)给实例变量初始化
3) 返回空间的首地址
2.那么问题来了:
(1)申请的空间在内存的哪个区?
答:
new 的时候申请的空间在内存的堆区(程序动态分配的内存空间)
当new的时候内存的布局如下:

初始化的时候:如果实例变量是基本数据类型,此时给初始化为0;如果 实例变量是OC字符串类型 ,此时给初始化为 null
(2)实例变量又保存在什么地方?
答:实例变量存放在堆区,指针变量存放在栈区
(3)对象方法保存在什么地方?
答:代码区
(4)为什么使用 [p run]; 就可以调用方法了 ?如何调用的?
答:首先找到P对应的堆区空间首先找p对应的堆区的空间,然后找到 _isa指针,再找到_isa指向的代码区的空间,然后到该空间中找方法

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马