【问题标题】:How to instantiate private / hidden Objective C framework class?如何实例化私有/隐藏的Objective C框架类?
【发布时间】:2019-11-14 05:21:50
【问题描述】:

如果您执行 AppKit 的 class-dump,它会显示该框架中定义的多个私有/隐藏类。

一个例子是下面的类:

__attribute__((visibility("hidden")))
@interface _NSFullScreenWindow : NSWindow
{
}

- (BOOL)canBecomeKeyWindow;

@end

如何创建一个在 Objective-C 中私有/隐藏的类的实例?

我知道私人/隐藏课程不应该被访问,所以不需要道德课。

【问题讨论】:

  • 您的 MacOS 应用程序设置一切正常吗?我可以毫无问题地实例化id object = [NSClassFromString(@"_NSFullScreenWindow") new]
  • @Kamil.S 我需要再看一遍,我创建了一个新的 Cocoa 项目并对其进行了测试,结果只是返回了 0x0 作为类。
  • @Kamil.S 我刚刚运行了与我今天的问题相同的代码,实际上我得到了对该类的引用,昨天检查变量时一定犯了一些错误。谢谢!
  • @Kamil.S 我将代码从问题移到了答案,因为它按照你说的那样工作。

标签: objective-c macos private


【解决方案1】:

您可以按名称访问该类并将其实例化,如下所示:

Class winClass = NSClassFromString(@"_NSFullScreenWindow");
id win = [winClass new];

运行该代码后,Win 将是一个指向 _NSFullScreenWindow 实例的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2013-08-18
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多