八天学会OC

第04天OC语言(07):new实现原理

2017-07-21  本文已影响18人  liyuhong
须读:看完该文章你能做什么?

使用另外一种方式 初始化一个对象
SomeClass *object = [[SomeClass alloc] init];

学习前:你必须会什么?

new方法是用来干什么的,内部做了什么操作,如何使用new类方法创建一个对象
1.new方法是用于 一个类创建一个对象的类方法
2.内部做了三件事情

     1.开辟存储空间 + alloc 方法
     2.初始化所有的属性(成员变量) - init方法
     3.返回对象的地址 offx16

3.SomeClass *object = [SomeClass new];



一、本章笔记
 一、new 做了三件事情
     1.开辟存储空间 + alloc 方法
     2.初始化所有的属性(成员变量) - init方法
     3.返回对象的地址
 二、alloc 
    做了什么事情 : 1.开辟存储空间, 2将所有的属性设置为0 3.返回当前实例对象的地址
 三、int 
    1.初始化成员变量,但是默认情况下 init的实现 是什么都没有做 2.返回初始化后的实例对象的地址
 四、为什么要用alloc init 初始化对象
    建议大家以后创建一个对象 使用 alloc init ,这样可以统一编码格式
 注意 : alloc返回的地址, 和 init返回地址 是同一个地址
二、code
main.m
#pragma mark 07-new实现原理
#pragma mark 概念
/*
 一、new 做了三件事情
     1.开辟存储空间 + alloc 方法
     2.初始化所有的属性(成员变量) - init方法
     3.返回对象的地址
 二、alloc 
    做了什么事情 : 1.开辟存储空间, 2将所有的属性设置为0 3.返回当前实例对象的地址
 三、int 
    1.初始化成员变量,但是默认情况下 init的实现 是什么都没有做 2.返回初始化后的实例对象的地址
 四、为什么要用alloc init 初始化对象
    建议大家以后创建一个对象 使用 alloc init ,这样可以统一编码格式
 注意 : alloc返回的地址, 和 init返回地址 是同一个地址
 */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{

    /*
     new 做了三件事情
     1.开辟存储空间 + alloc 方法
     2.初始化所有的属性(成员变量) - init方法
     3.返回对象的地址
     */
//    Person *p = [Person new];
    
    // alloc 做了什么事情 : 1.开辟存储空间, 2将所有的属性设置为0 3.返回当前实例对象的地址
    Person *p = [Person alloc];
    // init 1.初始化成员变量,但是默认情况下 init的实现 是什么都没有做 2.返回初始化后的实例对象的地址
    Person *p2 = [p init];
    
    // 注意 : alloc返回的地址, 和 init返回地址 是同一个地址
    NSLog(@"p1 = %p,p2 = %p",p,p2);// p1 = 0x100204dd0,p2 = 0x100204dd0
#warning 为什么要用alloc init 初始化对象
    // 建议大家以后创建一个对象 使用 alloc init ,这样可以统一编码格式
    Person *p3 = [[Person alloc]init];
    
    return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@end
>>>.m
#import "Person.h"

@implementation Person

@end
day04_07_01(官方alloc).png day04_07_02(官方init)1.png day04_07_02(官方init)2.png
上一篇 下一篇

猜你喜欢

热点阅读