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

本文详细介绍了Objective-C中的构造方法和分类的概念及其使用方式。构造方法用于初始化对象,并确保对象成员变量具有合理的默认值;分类则允许开发者在不修改原始类的基础上为其添加新的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- 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培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值