IOS学习笔记之类目和延展

本文介绍Objective-C中的类目和延展概念,包括如何使用它们为现有类添加新方法,以及这两种特性之间的区别。类目适用于为现有类添加新功能而不影响原始类的情况下,而延展则提供了一种更为灵活的方式,允许添加实例变量。

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

1、类目的概念

     类目(Category),也叫类别、分类。

     在开发过程中,有时候需要为已有的类扩展一些新的行为方法,但是却不想用到继承,这时候就会用到类目。

     类目可以为一个现有的类扩展新的方法,扩展的方法会成为原始类的一部分。

     通过类目扩展的方法,子类也可以继承下来。

2、定义类目

    定义类别的语法与定义类的语法存在差异:

   (1)定义类时使用的类名必须是该项目中没有的类,而定义类别时使用的类名必须是已有的类。

   (2)定义类别时必须使用圆括号来包含类别名。

   (3)类别中只能定义方法。

类目的定义和类的定义很相似,在.h文件里声明,在.m文件里实现方法。

   例如:为NSArray扩展一个新的方法:

@interface NSArray (ChineseLog)

-(NSString *)printChinese;

@end

@implementation NSArray (ChineseLog)

-(NSString *)printChinese{

    NSString *str = [NSString stringWithFormat:@"(\n\"%@\"\n)",[self componentsJoinedByString:@"\",\n\""]];

    return str;

}

      调用该方法:

        NSArray *array = @[@"张三",@"李四",@"王五"];

        NSLog(@"%@",[array printChinese]);


3、类目的局限性:

    (1)无法向类目中添加新的实例变量

    (2)如果类目中覆盖现有类的方法,会导致原始方法无法调用。因为类目中的方法具有更高的优先级,所以一般不要覆盖现有类中的方法。

4、类目的使用

    (1)当某个类非常强大时,如果将该类的实现代码放在一个文件夹中,将会导致这个文件非常强大,以至于维护起来非常困难。如果需要将一个较大的类分模块设计,使用类目是一个不错的选择。

    (2)没有在接口部分定义而是在实现部分定义的方法相当于私有方法,不可供外部访问。但是OC中实际上并没有真正的私有方法,因为可以通过类目来定义方法,从而实现"私有方法"的调用。

5、延展的概念

     延展(extension),与类目很相似,延展相当于就是匿名的类目。

    延展中声明的方法在类本身狗的@implementation和它对应的@end之间实现。

6、延展的定义

    @interface 已有类()

   {

         实例变量

   }

   //方法定义

   @end

.m文件修改import头文件

7、延展的使用

    

@interface Computer : NSObject

@property (nonatomic) NSString *cpu;

@property (nonatomic) NSString *hardDisk;

@property (nonatomic) NSString *motherboard;


-(void)assemble;

@end

#import "Computer.h"

#pragma mark 生产CPU

@interface Computer()

-(void)produceCpu;

@end

#pragma mark 生产硬盘

@interface Computer()

-(void)produceHardDisk;

@end

#pragma mark 生产主板

@interface Computer()

-(void)produceMotherboard;

@end

#pragma mark 实现

@implementation Computer

-(void)assemble{

    [self produceCpu];

    [self produceHardDisk];

    [self produceMotherboard];

    NSLog(@"电脑cpu为:%@,硬盘为:%@,主板为:%@",_cpu,_hardDisk,_motherboard);

}

-(void)produceCpu{

    _cpu = @"2 GHz Intel Core i7";

}

-(void)produceHardDisk{

    _hardDisk = @"Macintosh HD";

}

-(void)produceMotherboard{

    _motherboard = @"MacBook Air";

}

@end

 //使用延展组装电脑,cpu,硬盘、主板三个属性,有一个组装的方法

        Computer *computer = [[Computer alloc] init];

        [computer assemble];


8、类目和延展的区别

    (1)类目通常有单独的.h文佳.m文件,而延展不需要。延展用于临时对某个类的.h文件进行扩展。

    (2)类目不能定义实例变量,而延展可以使用。








内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值