壮志,敢教日月换新天。为有牺牲多

[Objective-C语言教程]类别(28)

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

有时,可能会发现希望通过添加仅在某些情况下有用的行为来扩展现有类。 要向现有类添加此类扩展,Objective-C提供了类别和扩展。

如果需要向现有类添加方法,或许为了添加功能以便在应用程序中更容易地执行某些操作,最简单的方法是使用类别。

声明类别的语法使用@interface关键字,就像标准的Objective-C类描述一样,但不表示子类的任何继承。在括号中指定类别的名称,如下所示 -

1 @interface ClassName (CategoryName)
2 
3 @end

1. 类别的特征

即使没有原始实现源代码,也可以为任何类声明类别。在类别中声明的任何方法都可用于原始类的所有实例,以及原始类的任何子类。
在运行时,类别添加的方法与原始类实现的方法之间没有区别。

现在,来看一个类别实现的示例。在Cocoa类NSString中添加一个类别。此类别将使可以添加一个新方法getCopyRightString,它返回版权字符串。 如下所示 -

复制代码
 1 #import <Foundation/Foundation.h>
 2 
 3 @interface NSString(MyAdditions)
 4 +(NSString *)getCopyRightString;
 5 @end
 6 
 7 @implementation NSString(MyAdditions)
 8 
 9 +(NSString *)getCopyRightString {
10    return @"Copyright y ii bai.com 2019";
11 }
12 
13 @end
14 
15 int main(int argc, const char * argv[]) {
16    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
17    NSString *copyrightString = [NSString getCopyRightString];
18    NSLog(@"Accessing Category: %@",copyrightString);
19 
20    [pool drain];
21    return 0;
22 }
复制代码

执行上面示例代码,得到以下结果:

2018-11-16 02:45:34.949 main[131207] Accessing Category: Copyright y ii bai.com 2019

即使类别添加的任何方法都可用于类及其子类的所有实例,仍需要在任何源代码文件中导入类别头文件,否则将遇到编译器警告和错误。

在上面示例中,由于只有一个类,因此没有包含任何头文件,在这种情况下应该包含如上所述的头文件。

posted @   为敢技术  阅读(134)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示