gpt4 book ai didi

c++ - 如何在运行时确定 void * 指针是指向 objective-c 对象还是指向 c++ 对象

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:02 25 4
gpt4 key购买 nike

我已经搜索了一段时间,但很惊讶没有人提出这个问题,所以我开始了:

我有一个接受 id 参数的 Objective-C 方法。现在我想使用 respondsToSelector: 来确定它是否对以下操作有效,如果不是,我有一个备份计划。 (这不是 ASSERT(0) :P)

所以,当有人试图搞砸我并传递一个 (id)someC++Object 时,我当然会遇到严重的崩溃。

我的问题很简单:我能否让一个 C++ 对象安全地使 respondsToSelector: 失败,以便我可以使用我的备份计划(给编码员一个打击)?

最佳答案

简而言之,你不能。

至少,不可靠,也不以任何理智的方式。坦率地说,也不应该打扰;面对基于 C 的语言,这种级别的防御性编程完全是徒劳的。

至少,您需要:

  • 验证指针指向可访问的内存
  • 指向当前分配
  • 第一个地址大小的 block 指向一个 Objective-C 类(可能包括派生类)

一般来说,任何大量使用 isKindOfClass:respondsToSelector:(在委托(delegate)模式之外)的代码都非常不符合 Objective-C 设计规范模式。

或者,换句话说,您有一个静态类型检查编译器,它非常擅长在编译时检查大量参数的有效性。使用它。

关于c++ - 如何在运行时确定 void * 指针是指向 objective-c 对象还是指向 c++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560770/

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