黑马程序员———OC学习第四天(构造方法及分类)

本文介绍了Objective-C中的构造方法及分类的概念与使用方法。构造方法用于初始化对象,并可通过重写进行自定义;分类则允许在不修改原有类的基础上添加新方法。

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

------- Android培训Java培训IOS培训.NET培训 期待与您交流! ----------

一、构造方法

1、什么是构造方法

完整地创建一个对象分为2步:

  • 为这个对象分配存储空间 +alloc
  • 初始化对象 -init

构造方法:用来初始化对象的方法,称之为构造方法(init方法)

eg:

// 分配存储空间
    Person *p1 = [Person alloc];
// 初始化对象
    Person *p2 = [p1 init];

2、重写init方法

重写init方法的目的:对象一经创建,属性就给赋值(不为0)

重写init方法的注意点:

  • 在实现中必须调用父类的init方法即[super init]
  • 判断self = [super init]是否为0
  • 对象方法

代码实现如下:

// 在Person的implementation中重写init方法
- (id)init
{
     if(self = [super init])
      {
            // 初始化年龄为100
            _age = 100;
      }
      return self;
}

3、自定义构造方法

自定义构造方法的使用场合:初始化对象的时候带参数,将参数赋值为成员变量

自定义构造方法的注意点:同样需要调用父类的init方法

补充:对应类实现对应的功能,比方说,有一个Person类和一个Student类,Person类是Student类的父类,Person类中有属性姓名、年龄,Student类中有新定义的属性学号,Person类中实现了自定义的构造方法创建一个对象的同时给成员变量姓名、年龄赋值。如果现在要求我们实现一个构造方法,对象一经创建的时候,它的姓名、年龄、学号都给赋予对应的值。这时候后我们就给在Student类的构造方法中调用父类的自定义的构造方法来实现设置姓名和年龄的目的,而不需要通过set方法来实现。

二、分类(Category)

1、基本用途

在不改变原来类模型的前提下,给类扩充方法(category)

2、格式

  • 分类的声明:@interface 类名 (分类名称)
  • 分类的实现:@implementation 类名 (分类名称)

代码实现如下:

// 给Person类添加一个NewAdd的分类
@interface Person (NewAdd)
   // ...
@end

@implementation Person (NewAdd)
  //....
@end

3、注意点

  • Category可以访问原始类的实例变量,但是不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
  • Category可以实现原始类的方法,但不推荐这么做,因为分类中方法的优先级是最高的,这样会导致原始类中方法一直调用不到
  • 多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效

4、实战演练

分类使用比较多得一个场景就是为系统自定义类扩充方法,下面将用分类为NSString类扩充一个方法来实现返回字符串中0~9的个数的功能

eg

@interface NSString (NewAdd)
// 设计一个对象方法返回当前字符串中0~9的个数
- (int)getNumber;
@end

@implementation NSString (NewAdd)
- (int)getNumber
{
     // 数字个数
     int count = 0;
    // 遍历字符串
    for(int i = 0; i<self.length; i++)
    {
        // 取出对应位置的字符
        unichar c = [str characterAtIndex:i]
        // 判断是否为0`9数字
        if( c>='0' && c<='9')
         {
              count++;
         }
      }
      return count;
}
@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值