【发布时间】:2012-11-17 11:30:21
【问题描述】:
如果我理解正确,我们可以将 void * 归类为 “C 可保留指针类型”。 因此,将其分配给 Objective-C 对象将被隐式桥接。但是,编译器会引发需要显式桥接的错误。
const void * somePtr = (void *)0x12345678;
- (void)someMethod:(id)sender
{
NSObject *obj = (NSObject *)somePtr;
}
另外,我检查了空指针常量,它编译时没有显式桥接。
NSObject *obj = (void *)0;
我正在使用 XCode 4.5(Clang 4.1 (tags/Apple/clang-421.11.66) (基于 LLVM 3.1svn))。
问题: 我知道将一些任意/不相关的指针分配给 NSObject 有点奇怪,但我想确保我是否正确理解了规则。我有点怀疑“C 可保留指针类型”。 描述;特别是关于(可能有资格)和(可能有资格)的意图。我们可以将哪些指针类型归类为“C 可保留指针类型”?
另外,它实际上是指“系统全局变量”语句来自系统的全局变量吗?
3.3.2.转换为具有已知语义的可保留对象指针类型的表达式 [开始于 Apple 4.0,LLVM 3.1]
一个表达式是已知的保留不可知,如果它是:
- Objective-C 字符串文字,
- 从 C 可保留指针类型的 const 系统全局变量加载,
- 或空指针常量。
如果转换操作数已知为未保留或已知保留不可知,则转换被视为 __bridge 转换。
7.8。 C 可保留指针类型
如果一个类型是指向 (可能限定) void 的指针或指向 (可能限定符) 结构或类类型的指针,则该类型是 C 可保留指针类型。
【问题讨论】:
标签: objective-c automatic-ref-counting