Objective - C类的扩展

本文深入探讨了Objective-C类的扩展方法,包括通过'category'添加新方法,以及类的延展(匿名类目)的使用场景与实现细节。详细解释了如何在现有类的基础上增加功能,同时保持代码的组织性和可维护性。

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

Objective - C类的扩展


有关类的笔记

- 通过 “category” 给现有的类添加方法

已经定义了类OYCat.然而当OYCat的源码不便直接修改的时候,可以通过添加一个类别(category)来为OYCat添加新方法。

作用:

(1)给没有.m文件的类添加方法
(2)类目中的方法,子类会自动继承
(3)有利于多人一起开发同一个类。
(4)在只需要一个类的部分方法时,可以只import这部分方法的头文件,有利于缩减代码量。

通用格式:

定义:
@interface ClassName (CategoryName)

 method1;

@end
实现:
@implementation ClassName (CategoryName)

 method1{

}

@end

针对OYCat(我自定义的一个类,用来举个例子):

定义:
@interface OYCat (meow)

 method1;
 method2;

@end
实现:
@implementation OYCat (meow)

 method1{…}
 method2{…}

@end

这样添加的方法,OYCat以及其子类都可以用。
通常把这样的方法的定义和实现放在单独的头文件和源文件里面,命名通常是“类名+类别”,比如:OYCat+meow.h和OYCat+meow.m。(其实现在的Xcode在新建文件的时候选择category,它自动帮着命名)
在用的时候,别忘了要把新方法的头文件include进来。
Note:
(1)在用的时候,别忘了要把新方法的头文件include进来。
(2)类目中不可以添加实例变量。
(3)给类新定义的方法,方法名不能够是用过的,比如不能和OYCat类(或其父类)原有的方法重名,也不可以和OYCat(或其父类)其他类别里的方法重名。
Best Practice:
为了避免重名发生,推荐给方法名加前缀,比如把method1改为oy_method1;

-类的延展(也叫匿名类目)

直接对类进行扩展,向类中添加新方法和属性。这些方法属于内部方法和内部属性,只有对象本身可以对它进行操作。新的属性和方法的定义和实现需要按如下方法:

作用:

给类添加私有方法和私有属性。

定义:

@interface ClassName ()
@property NSObject *extraProperty;
 method1;
 method2;
@end

实现:

对于新的属性,编译器视它同类本身有的属性是一样的,会自动实现它的getter和setter方法。
对于新的方法,需要直接在这个类本身的.m文件中去实现,实现方法和原来的方法一样。

Note:该的方法只适用于,向项目中有源文件的类添加方法,也就是说,类和它新添加的方法需要在同时编译才可以。一些OC自带的类,比如NSString这样不能直接修改源码的就不合适。

用途:

让某些属性对本类对象为readwrite,对其他类 的对象为readonly。具体做法如下:
在原来的头文件中声明为readonly的属性

@interface OYCar : NSObject
@property (readonly)NSString * name;
@end

.m文件 中再次声明(在@implementation前面),并且声明成readwrite。

@interface OYCar ()
@property (readwrite)NSString *name;
@end

@implementation OYCar@end

那么,在该类的对象方法中可以通过 [self setName:@“newName”]或者self.name=@“newName”;来修改name的值了。此时name对其他类 的对象仍为只读的。

此文章是我边看官方文档变总结的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值