美文网首页iOS学习笔记
OC中对象创建过程

OC中对象创建过程

作者: Adrift | 来源:发表于2016-04-28 04:50 被阅读370次
#import <Foundation/Foundation.h>

@interface Person : NSObject{
@public
    // 属性
    int _age;
    double _height;
    double _weight;
}
// 行为
- (void)eat:(char *)food;
- (void)sleep;
- (void)walk;
+ (void)show;
@end
@implementation Person
- (void)eat:(char *)food {
    NSLog(@"eat:%s", food);
}

- (void)sleep {
    NSLog(@"sleep");
}

- (void)walk {
    NSLog(@"walk");
}

+ (void)show {
    NSLog(@"I'm coming!!!");
}
@end

int main(int argc, const char * argv[]) {
    //对象创建过程:
    //1.将代码读取到内存中的代码区(二进制)
    //2.在堆中由系统自动创建该类的类对象,类对象中包含这个类所有的方法
    //3.然后在堆中创建该类的实例对象,实例对象中包含这个类的所有属性,还有isa指针(这个指针指向类对象Class)  alloc,init.因为没有重写init方法,所以所有属性设为默认值.
    //4.返回实例对象的地址给栈中的引用 person
    Person *person = [Person new];
    
    //通过person引用给_age赋值
    person->_age = 30;
    person->_height = 1.75;
    person->_weight = 65.0;
    NSLog(@"age=%d, height=%f, weight=%f", person->_age, person->_height, person->_weight);
    
    //通过person引用找到类实例,然后通过类实例的isa指针找到类对象,在类对象中找到eat方法进行调用.
    [person eat:"milk"];
    //通过Person类调用,会直接到堆中去找Person类的类对象,然后进行调用.
    [Person show];

    struct Person {
        char *name;
        int age;
    };
    struct Person sp;
    NSLog(@"&sp = %p",&sp); //内存地址:0x7fff5fbff7d8
    NSLog(@"&sp.age=%p",&sp.name);//内存地址:0x7fff5fbff7d8
    //以上一个声明构造并实例化构造可以看出:结构体实例地址就是第0个属性的地址
    
    //对象的本质就是结构体,所以person的地址也是第0个属性的地址,但是这个属性不是_age,而是isa
    NSLog(@"person = %p", person);//内存地址:0x100200420
    NSLog(@"&person.age = %p",&(person->_age));//内存地址:0x100200428
    //由上面可以看出在_age之前还有一个属性,那就是isa.
    
    //每次new都会分配内存空间创建一个新的对象.这两个对象指向同一个类对象.
    Person *person2 = [Person new];
    return 0;
}

本文原链接:OC中对象创建过程
--EOF--

相关文章

  • OC中对象创建过程

    本文原链接:OC中对象创建过程--EOF--

  • 内存管理

    概述 程序在运行过程中会创建很多的对象,oc中的对象都是存储在堆空间中的,系统不会自动释放堆空间中的内存。 oc中...

  • IOS 对象的创建

    OC 中创建对象是基础的操作,但我们是否有了解过OC对象是怎么创建的,这篇文章就是从最基础的对象创建起,看一下OC...

  • 总纲

    一句代码创建常用UI控件类与对象OC中面向对象的编程思想OC基础语法复习OC中的协议OC中的block学习导航栏按...

  • 重学iOS系列之底层基础(一)OC对象的本质

    导读 在开发过程中,是否有疑惑过,我们创建的OC对象本质到底是什么?实例对象在内存中是怎么存储的?对象在程...

  • OC 对象的创建

    一个程序在运行的过程中,离不开对象的创建,那么对象究竟是怎么创建的呢?OC 作为一门高级语言,对象在底层又是怎么实...

  • OC:内存管理

    目录 内存管理原理 自动释放池 内存管理原则 程序运行过程中要创建大量的对象,OC中对象是存储在堆中的,系统不会自...

  • OC中的集合类型

    数组数组的创建NSArray * array = @[@"123",@1,@"dsfds"];//在OC中创建对象...

  • 联合体与位域

    在对 OC 对象创建的探究过程中,我们发现一个很有趣的实现 isa。isa 是将对象内存空间与 class 之间联...

  • iOS的内存管理

    iOS OC对象的内存管理 在iOS中,使用引用计数来管理OC对象内存 一个新创建的OC对象引用计数默认是1,当引...

网友评论

    本文标题:OC中对象创建过程

    本文链接:https://www.haomeiwen.com/subject/sizcrttx.html