zoukankan      html  css  js  c++  java
  • 李洪强iOS开发之OC[014] -对象的存储细节

    //

    //  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;

    }

  • 相关阅读:
    概念
    Jquery和Aspnet前台控件及后台代码交互
    未能找到引用的组件“Microsoft.Office.Core
    C#操作Excel,调用ApplicationClass.Quit()关闭Excel时,发生异常:Microsoft Office Word 遇到问题需要关闭
    Javasrcipt捕获按键
    使用Interop.Excel生成Excel
    Javasrcipt时间相关函数
    (转)各种纹理贴图技术
    (转)立体纹理
    (转)地形碰撞高度计算
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5655486.html
Copyright © 2011-2022 走看看