如何确定 void * 指针在运行时指向 objective-c 对象还是 c++ 对象
How can I determine whether a void * pointer points to a objective-c object or a c++ object at runtime
我已经搜索了一段时间,但惊讶于没有人提出这个问题,所以我在这里:
我有一个接受id参数的Objective-C方法。现在我想使用 respondsToSelector:
来确定它是否适用于以下操作,如果不是,我有一个备份计划。(这不是ASSERT(0)
:P)
所以,当有人试图搞砸我并通过(id)someC++Object
时,我当然会崩溃。
的问题很简单:我可以让C++对象安全地使respondsToSelector:
失败,以便我可以使用我的备份计划(打打编码员的脸)?
简而言之,你不能。
至少,不可靠,也不以任何理智的方式。 坦率地说,也不应该打扰; 面对基于C的语言,这种级别的防御性编程是完全徒劳的。
至少,您需要:
- 验证指针是否指向可访问的内存
- 指向当前分配
- 第一个地址大小的块指向一个 Objective-C 类(可能包括派生类)
通常,任何大量使用isKindOfClass:
和respondsToSelector:
(在委托模式之外)的代码都与Objective-C设计模式的规范非常不典型。
你有一个静态类型检查编译器,它非常擅长在编译时检查大量有效性参数。 使用它。
相关文章:
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- C++对象作为 Objective-C++ 属性
- 如何在从Objective C调用C++回调后释放桥接对象
- 使用 c++ 标准::unique_ptr<> 或 std::shared_ptr<> 管理 objective-C 对象
- 防止从C++代码中调用 Objective-C 对象
- Objective-C++C++对象析构函数
- 如何在C++应用程序中处理指向 Objective-C 对象的指针
- 如何确定 void * 指针在运行时指向 objective-c 对象还是 c++ 对象
- 有没有办法用C++类包装一个 Objective-C 对象
- 在Objective c包装器中传递c++对象
- Cocoa Objective-C:使用c++对象作为NSDictionary键
- Objective-C块和c++对象
- 添加c++对象到Objective C集合(NSSet)的麻烦
- Objective-C:如果我在ARC的函数中返回一个c++对象,它会创建一个副本吗?我是否必须手动释放该副本?
- 我可以添加自己的类型转换操作符,以便能够将c++对象转换为objective C吗?
- 在c++对象中使用ARC和Objective C对象会发生什么?
- 在没有对象的情况下从Objective C调用特定的C++方法
- C++流日志Objective-C对象
- cocoa touch -- 测试对象是否是 objective-C 对象
- 从c++对象调用Objective-C父对象