【问题标题】:How to specify property to C++ pointer in ARC environment?如何在 ARC 环境中为 C++ 指针指定属性?
【发布时间】:2013-09-29 08:08:09
【问题描述】:

我需要将 C++ 指针属性添加到我的 Obj-C 类中。该项目基于ARC。我想拥有 getter 和 setter 的属性。但是据我了解,该 C++ 指针的分配不能由 Obj-C 框架管理,所以我需要指定弱指针或其他东西?

【问题讨论】:

  • 什么是 C++ 指针?您的意思是指向 C++ 对象的指针吗?向我们展示您尝试了什么以及您的问题在哪里。
  • 是的,我的意思是指向 C++ 对象的指针。我试图为 getter 和 setter 创建方法来获取/设置 iVar。但我想使用点符号访问该指针。
  • ...什么没解决?

标签: c++ objective-c automatic-ref-counting


【解决方案1】:

尝试以下操作:

NSObject* arcObject = [[NSObject alloc] init];
void* arcObjectPointer = (__bridge void*)arcObject;

void* cObjectPointer = NULL;
NSObject* cObject = (__bridge NSObject*)cObjectPointer;

__bridge 对象的行为与非 ARC 对象的行为相同。使用 __bridge,您可以告诉 ARC,您了解其中的含义和潜在危险。

【讨论】:

  • 但是如何在header中声明属性本身呢?
【解决方案2】:

C/C++ 指针(包括指向 C++ 对象的指针)不受 ARC 约束,其处理方式与其他基本类型(如整数)类似。对于属性,这意味着您使用assign。例如:

@property (assign) int *intPtrValuedProperty

您必须手动管理引用内存的分配和解除分配,就像在 C/C++ 中一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2016-11-03
    • 2012-02-08
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多