为什么objective-c不允许指向结构的指针?

时间:2016-12-30 07:00:26

标签: objective-c pointers struct

我想知道为什么objective-c(ARC)不允许我使用指向结构的指针(在这种情况下是NSPoint)

我的代码在没有代码的情况下运行,我只是想问为什么它不允许它,因为我没有在Google上找到理由。

我目前的猜测是因为结构不能包含对象,但我想仔细检查一下;并想知道结构本身的保存位置。谢谢!

1 个答案:

答案 0 :(得分:1)

迁移到ARC时,由于包含对象指针的结构的初始化,复制,移动或销毁的复杂性,编译器不再允许这样做。

Apple在Transitioning to ARC指南行中将其称为“ ARC强制执行新规则”部分。

  
      
  • 您不能在C结构中使用对象指针。

         
        
    • 您可以创建一个Objective-C类来管理数据,而不是使用结构   代替。
    •   
  •   

但是从this commit开始,LLVM现在允许这样做。

要直接从提交消息中引用:

  

不允许在结构中声明__strong指针字段   直到现在为止使用Objective-C ARC,因为那样会使结构   默认初始化,复制/移动和销毁非常简单,这是   不是C要做的。此补丁解除了该限制。

     

合成非平凡C结构的特殊函数   需要默认初始化,复制/移动和销毁结构,以及   管理__strong指针字段指向的对象的所有权   至。传递给函数的非平凡结构会在   被调用者功能。