iOS开发之oc(八)--小知识补充 init方法补充

小知识补充 

一、 id

1. 简介

万能指针,能指向任何OC对象,相当于NSObject *

id类型的定义

typedef struct objc_object 
{
   
     Class isa;

} *id;

2. 使用

// 注意:id后面不要加上*

id p = [Person new];

3. 局限性

调用一个不存在的方法,编译器会马上报错

二、 .h和.m文件的抽取

1)每个类分布在不同文件中

2)类的声明放在.h文件,类的实现放在.m文件

3)若想使用某个类,就包含某个类的.h声明文件

三、 init方法补充(重点)

1. 对象创建原理

 new的拆分两部曲

u  分配内存(+alloc)

u  初始化(-init)

Person *p1 = [Person alloc];
Person *p1 = [p1 init];
合成一句后:
Person *p = [[Person alloc] init];

2. init方法的重写

l   想在对象创建完毕后,成员变量马上就有一些默认的值

l   init方法的重写过程

- (id)init
{
// 1.一定要调用super的init方法:初始化父类中声明的一些成员变量和其他属性
// self = [super init]; // 当前对象 self
// 2.如果初始化成功,才有必要进行接下来的初始化
if (self = [super init]) { // 初始化成功 _age = 10; } return self; // 3.返回一个已经初始化完毕的值 }

3.自定义构造方法

l   构造方法的一些规范

  • - (id)initWithAge:(int)age {
        if (self = [super init]) {
            _age = age;
        }
        return self;
    }

    传递多个参数进行初始化

    - (id) initWithAge:(int)age  andNo:(int)no;

    返回值是id类型

  • 方法名都以init开头

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。