您的位置:首页 > 职场人生

黑马程序员-我的第十一篇学习日记:OC构造方法和分类的使用

2014-04-07 19:12 393 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

一.构造方法

构造方法是用来初始化对象的方法,是一个对象方法以“-”开头

如:-(id) init

重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

1.重写构造方法的注意点

  先调用父类的构造方法[superinit]

  再调用子类内部成员变量的初始化

2.书写规范

  一定是对象方法,一定“-”开头

  返回值一般是id 类型

  方法名一般以init 开头

 

如:

 -(id) init

  {

         if (self = [superinit])  //固定写法:为了让对象创建出来,成员变量有一些固定的值

    {

                   _age= 10;    //可以动态改变成员变量

    }

   return  self;

  }

 

 

二 . 分类

 分来可以给某个类扩充一些方法(不能修改原来的代码)

 分类的作用:在不改变原来内容的基础上,可以为类增加一些方法

 写法格式:

    @interface  类名(分类名称)

    @end

    @implementation 类名(分类名称)

  如:

     @interface  Person(MJ)

     @end

     @implementation Person(MJ)

     @end

 分类的使用注意:

    1.分类只能增加方法,不能增加成员变量

     @interface  Person(MJ)

     -(void)run;

     @end

    2.分类方法实现中可以访问原来类中的成员变量

    @interface  Person(MJ)

    -(void)fangFa;

     @end

     @implementation Person(MJ)

     -(void)fangFa

     {

                   NSLog(@"%f", _wegiht);

     }

     @end

    3.分类可以重新实现原来类中的方法,但是覆盖原来的方法,会导致原来的方法,无法 使 用

    #import <Foundation/Foundation.h>

    #import "Person.h"

    #import "Person+MJ.h"

   @interface  Person   //人这个类的声明

    -(void)run;   //方法声明

    @end

    @implementation Person      //人这个类实现

     -(void)run   //方法实现

     {

          NSLog(@"人跑起来");

     }

    @end

     @interface Person(MJ)       //人分类的声明

     -(void)run;      //方法声明

    @end

    @implementation Person(MJ)      //人分类的实现

     -(void)run   //方法实现

     {

            NSLog(@"分类跑起来");

     }

    @end

    int main()

    {

       Person *p = [[Person  alloc]init];

       [p run];  //调用方法

    }

     程序结果是:分类跑起来

     在主函数调用run方法,原来类中的run方法被覆盖了,调用了分类中的run方法

    4.方法调用的优先级:分类最后参与编译的分类优先 -> 原来类 -> 父类

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐