【问题标题】:objc_getProtocol() returns NULL for `NSApplicationDelegate"?objc_getProtocol() 为“NSApplicationDelegate”返回 NULL?
【发布时间】:2012-04-18 14:56:26
【问题描述】:

我正在尝试使用objc_getProtocol() 函数来获取对表示NSApplicationDelegate 协议的结构的引用:

Protocol *protocol = objc_getProtocol("NSApplicationDelegate");

但是,由于某种原因,它总是返回 NULL

NSObjectNSCodingNSTableViewDelegateNSTableViewDataSource 等其他协议工作正常。

NSApplicationDelegate 有什么特别之处,还是我做错了什么?

【问题讨论】:

  • 是mac应用吗?如果是,请添加该标签!因为我在 iOS 中找不到 NSApplicationDelegate(这里我们使用的是 UIApplicationDelegate)应用程序。!?如果我错了,请纠正我。!
  • 是的,它是一个 Mac 应用程序(因此有 AppKit 标签)。
  • 您可以使用@protocol(NSApplicationDelegate) 来获取。
  • 那么 _NSApplicationLightLaunchDelegate 呢?
  • 不幸的是,我需要使用 objc_getProtocol(),因为直到运行时我才真正知道协议名称(我只是在示例中对字符串进行硬编码)。

标签: objective-c cocoa protocols objective-c-runtime nsapplication


【解决方案1】:

在 Apple 文档中找到答案:

http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html#//apple_ref/doc/uid/TP30001163-CH15

编译器为它遇到的每个协议声明创建一个协议对象,但前提是协议也是:

  • 被一个班级采用,
  • 或在源代码中的某处引用(使用 @protocol())

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-26
    • 2011-08-03
    • 2020-01-02
    • 2011-09-06
    • 2020-11-25
    • 2018-05-06
    相关资源
    最近更新 更多