我想知道为什么objective-c(ARC)不允许我使用指向结构的指针(在这种情况下是NSPoint)
我的代码在没有代码的情况下运行,我只是想问为什么它不允许它,因为我没有在Google上找到理由。
我目前的猜测是因为结构不能包含对象,但我想仔细检查一下;并想知道结构本身的保存位置。谢谢!
答案 0 :(得分:1)
迁移到ARC时,由于包含对象指针的结构的初始化,复制,移动或销毁的复杂性,编译器不再允许这样做。
Apple在Transitioning to ARC指南行中将其称为“ ARC强制执行新规则”部分。
您不能在C结构中使用对象指针。
- 您可以创建一个Objective-C类来管理数据,而不是使用结构 代替。
但是从this commit开始,LLVM现在允许这样做。
要直接从提交消息中引用:
不允许在结构中声明__strong指针字段 直到现在为止使用Objective-C ARC,因为那样会使结构 默认初始化,复制/移动和销毁非常简单,这是 不是C要做的。此补丁解除了该限制。
合成非平凡C结构的特殊函数 需要默认初始化,复制/移动和销毁结构,以及 管理__strong指针字段指向的对象的所有权 至。传递给函数的非平凡结构会在 被调用者功能。