Objective-c扩展方法的一种:延展
下面是我在学习的过程中学到的一点知识,虽然很肤浅,不过本人也想与大家一起分享!希望多指点。
先看代码结构
Test
main.m
SceneManager.h
SceneManager.m
SubSceneManager.h
SubSceneManager.m
------------------
下面是代码实现:
SceneManager.h
#import <Foundation/Foundation.h>
@interface
SceneManager : NSObject
- (void)
go;
@end
SceneManager.m
#import
"SceneManager.h"
// 对类的延展 - 隐藏方法 wrap的一种手段(非强制)
@interface
SceneManager ()
+ (void) wrap;
@end
@implementation
SceneManager
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
- (void) go {
NSLog(@"method of go");
}
+ (void) wrap {
NSLog(@"method of wrap");
}
@end
SubSceneManager.h
#import
"SceneManager.h"
@interface SubSceneManager :
SceneManager
@end
SubSceneManager.m
#import
"SubSceneManager.h"
@implementation SubSceneManager
- (id)init
{
self = [super init];
if (self) {
// Initialization code here.
}
return self;
}
@end
main.m
#import
<Foundation/Foundation.h>
#import "SceneManager.h"
#import
"SubSceneManager.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SceneManager *sm = [[SubSceneManager alloc] init];
[sm go];
// 此句应该注释掉
/*
[SceneManager wrap]; // 这里会抱一个警告:Class method of "+ wrap" not found
// 不过虽然是警告,不过运行是正常的,不过这么写在自我规范上不好,即使编译器没有做强制限制,我们自己也要限制自己。
// 不然,延展方法就毫无意义可言。
*/
[pool drain];
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
这虽然不能强制限制调用,可是算是一种好的编码习惯吧? 我这么理解的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库