gpt4 book ai didi

objective-c - 如何在 Objective-C 中创建文件范围类?

转载 作者:行者123 更新时间:2023-12-04 05:46:44 25 4
gpt4 key购买 nike

我留下了原文,所以人们可以理解评论的上下文。希望这个例子能更好地帮助解释我所追求的。

我可以在 Obj-C 中创建一个具有文件范围可见性的类吗?

例如,我在 NSNotificationCenter 上编写了一个方法压缩类别,当它释放时会自动删除任何观察者。

我在实现中使用了一个辅助类,为了防止名称冲突,我设计了一个命名方案。类别为 NSNotificationCenter (WJHAutoRemoval),因此在此代码中使用的私有(private)帮助器类被命名为...

WJH_NSNotification_WJHAutoRemoval__Private__BlockObserver

这是一口,目前我只是这样做......
#define BlockObserver WJH_NSNotification_WJHAutoRemoval__Private__BlockObserver

只需在代码中使用 BlockObserver。

但是,我不喜欢这种解决方案。

我想告诉编译器,“嘿,这个类被命名为 Bar。我的代码将作为 Bar 访问它,但我真的是唯一需要知道的人。你自己生成一个时髦的名字,或者更好的是,不要甚至导出符号,因为我是唯一应该关心的人。”

对于纯 C,我会是“静态”,而对于 C++,我会是“命名空间 { }”

在 Obj-C 中执行此操作的首选/最佳/唯一方法是什么?

原始问题

我想在另一个实现中使用一个辅助类。但是,我不想要外部链接。现在,我只是让帮助类名称非常独特,这样我就不会得到重复的链接器符号。

我可以使用静态 C 函数,但我想编写一个辅助类,链接器仅在编译单元内可见。

例如,我想在多个 .m 文件中包含以下内容,每个“Helper”对该文件都是唯一的,并且没有其他编译单元具有链接器访问权限。如果我在 10 个不同的文件中有这个,我将有 10 个单独的类。
@interface Helper : NSObject
...
@end

@implementation Helper : NSObject
...
@end

我什至在任何地方都找不到这方面的提示,而且我在接口(interface)/实现前面加上“静态”的微弱尝试都出现了错误。

谢谢!

最佳答案

由于 Objective-C 运行时,我不相信你能够做你想做的事。您的所有类都加载到运行时中,并且具有相同名称的多个类将相互冲突。

Objective-C 是一种动态语言。与在编译时绑定(bind)方法调用的其他语言不同,Objective-C 在调用(每次调用)时进行方法解析。运行时在运行时中查找类,然后在类中查找方法。运行时不支持具有相同名称的不同类,并且 Objective-C 不支持命名空间来分隔您的类。

如果您的 Helper类在每种情况下都是不同的,它们需要不同的类名(在任何语言中,多个具有相同名称的类对我来说都是个坏主意)。如果它们相同,那么为什么要单独声明它们。

我认为您需要重新考虑您的策略,因为您尝试做的事情听起来不是很 Objective-C 或 Cocoa。

关于objective-c - 如何在 Objective-C 中创建文件范围类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com