iOS开发之oc(八)--知识补充:id类型和init方法补充

知识补充 

一、 id

1. 简介

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

id类型的定义

typedef struct objc_object 
{
   
     Class isa;

} *id;

2. 使用

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

id p = [Person new];

3. 局限性

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

这时可以用instancetype替代id

二、 init方法补充(重点)

1. 对象创建原理

 new的拆分两部曲

> 分配内存(+alloc)

>初始化(-init)

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

2. init方法的重写

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

>  就需要重写init方法

过程如下

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

3.自定义构造方法

  • 返回值是id类型

  • 方法名都以init开头

        1>构造方法的一些规范

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

    2>传递多个参数进行初始化

    -(id) initWithAge:(int)age  andNo:(int)no                  //  就是这里不同而已
    {
       if(self = [super init])            
       {
             _age = age;
             _no = no;   
       }
       return self;
    }    

     

     

三、小知识点补充:

(1)

nil:如果要把对象赋值为空 用nil

Nil :如果要把基本数据类型赋值为空  用Nil

void * :可以指向任何数据类型的变量

 id类型: 可以引用任何类实例化的对象  ,在给所引用的对象发消息时不需要强转

【self和super关键字】

self:接受消息的对象或类,当前对象的指针 (通过那个对象使用到self,self 就是谁)。

super:接受消息的对象的父类,用于调用父类的成员方法。

 

(2)对象的内存表示

//父类的成员变量

//父类的成员方法

//自身的成员变量

//自身的成员方法

(3)复合对象

用面向对象的思想把大象装进冰箱

 对象          成员变量                          成员函数                                                           类

 

象         age/weight/height      setter/getter                                                  Elephant

 

箱        Elephant * ele                  opendoor/storeelephant/closedor       Haier

 

(4)NSLog输出增强

  • __FILE__ :源代码文件名

  • __LINE__ :NSLog代码在第几行

  • _cmd :代表着当前方法的SEL

 

posted @ 2015-02-24 15:36  timo1234  阅读(352)  评论(0编辑  收藏  举报