问题标签 [toll-free-bridging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2985 浏览

objective-c - 将 CFIndex 转换为 NSInteger

这个问题与我的类似,但不包含答案。我想将 aCFIndex转换为NSInteger. 我检查了具有免费桥接的类型列表,这不是其中之一。

0 投票
2 回答
618 浏览

objective-c - ARC中的NSFastEnumeration对象转换

我正在尝试在自定义类上实现NSFastEnumeration协议中的countByEnumeratingWithState:objects:count:方法。

到目前为止,我已经正确地迭代了我的对象,但是返回的对象不是 Objective-C 对象,而是核心基础等价物。

这是设置 state->itemsPtr 的代码部分:

MyCustomCollection.m

然后我像这样在其他地方调用'for..in'循环

其他类.m

控制台输出为:

如您所见,在 NSFastEnumeration 协议方法中,对象打印得很好,但是一旦它被强制转换,id __unsafe_unretained *我就会丢失原始的 Objective-C 对应类。

老实说,我不太确定(__unsafe_unretained id *)(__bridge void *)在这种情况下铸造是如何工作的。似乎要匹配正确的(__unsafe_unretained id *)类型 itemsPtr 需要。(__bridge void *)似乎使用 __bridge 转换为 void 类型的指针,用于将 obj-c 世界连接到 CF 世界。根据llvm 文档,对于__bridge

没有所有权转移,ARC 没有插入保留操作

那是对的吗?

据我了解,__NSCFConstantString 只是相当于 NSString 的核心基础。我也明白,使用 ARC,您需要从 Objective-C 对象桥接到 CoreFoundation 等价物,因为 ARC 不知道如何管理后者的内存。

我怎样才能让它工作,以便我的'for..in'循环中的对象是原始类型?

另请注意,在这种情况下,我将 NSStrings 添加到我的集合中,但理论上它应该支持任何对象。

更新

Rob 的答案是正确的,但为了测试这个理论,我将 for 循环更改为:

理论上应该可以工作,因为对象是等效的,但它会因以下错误而崩溃:

看起来for循环中返回的对象几乎是类而不是实例。这里可能有其他问题......对此有什么想法吗?

更新 2:解决方案

就这么简单:(感谢 CodaFi

0 投票
1 回答
43029 浏览

objective-c - NSString 到 CFStringRef 和 CFStringRef 到 ARC 中的 NSString?

我想了解NSStringCFStringRefARC 中获取 a 的正确方法?反方向也一样,CFStringRefNSStringARC 中?

在不造成内存泄漏的情况下执行此操作的正确方法是什么?

0 投票
1 回答
450 浏览

callback - OS X 和 FSEvents:如何释放提供给 FSEventStreamRef 的回调指针?

我正在使用 FSEvents 来监视目录,并且每当目录更改时,我都会调用一个块,该块最初传递到 FSEventStreamRef 的 FSEventStreamContext 中。在停止监视目录时如何释放块?下面的代码供参考。

0 投票
1 回答
514 浏览

objective-c - OS X:如何使用 __bridge_transfer 正确桥接释放指针

我有一个块对象,它被转换为void *指针以传递给 C 库。我正在部署到 OS X 10.6,所以CFBridgingRetain不可CFBridgingRelease用。

相反,我正在做:

问题: 在 ptr_release 中,我收到“未使用的变量”警告。我担心编译器可能会优化该__bridge_transfer行并且该块将永远不会被释放。这会发生吗?即使没有,这是让 ARC 知道在结束时释放块的正确方法ptr_release吗?

0 投票
1 回答
287 浏览

objective-c - 是否可以安全地使用匹配的 CFBridging 调用来为非 CF 类型传入和传出 ARC?

我正在使用 Chipmunk 物理引擎编写游戏,我想在每个身体的userData字段中存储一个指向 Objective-C 对象的指针。我知道我需要使用桥接演员表在idand之间转换void *,但我不确定我这样做的方式是否安全:

这段代码似乎有效,但我也读到你只应该CFBridging*()在可以免费桥接到核心基础类型的对象上使用。由于UserData派生自NSObject并且NSObject不在免费桥接类型列表中,因此我似乎违反了该规则。

我的代码是否可以,因为我最终调用CFBridgingRelease并且不尝试将对象传递给任何其他核心基础函数,或者我应该以另一种方式将 Objective-C 对象传入和传出 C?

0 投票
1 回答
1314 浏览

ios - ARC下容器中处理CGImageRef的正确方法

我是新来在我的项目中加入弧。我正在尝试了解 __bridge 及其小朋友,以便在从容器中添加和删除它们时正确地投射我的 CGImageRef。

我的一条线路上出现“存储的对象的潜在泄漏……”。这是我的代码的基本循环:

然后在路上的某个地方我这样做:

有人可以对此有所了解吗?另外,我试过只使用 __bridge 但这并没有什么不同。

编辑1:

我扩展了分析器的结果并跟踪了正在发生的事情。这是因为我在这样的方法中使用 iRef:[self doSomethingFancy:iRef]; 在这种方法中,iRef 被保留但没有被释放。这样就解决了警告,但我仍然有点困惑。

我不太清楚何时使用各种 __bridge 演员表。在 ARC 下,以下是否会增加引用计数?

另外,在某些时候,如果我告诉我的 _array iVar 删除所有对象,那会正确减少它们的引用计数吗?

0 投票
1 回答
3928 浏览

objective-c - ARC: __bridge versus __bridge_retained using contextInfo test case

Consider this ARC code:

Question: on line 7, should __bridge be used, or __bridge_retained, or does it not matter, or does the choice depend on the string's retain count (that is, whether the string is explicitly alloced vs being autoreleased through a class initializer like +[NSString stringWithString:]?

0 投票
5 回答
10112 浏览

objective-c - Swift 中的免费桥接和指针访问

我正在将一个应用程序从 Objective-C 移植到 Swift,我需要使用以下方法:

旧的逻辑看起来像这样(几个网站似乎都同意):

由于免费桥接,这工作得很好。但是,“Swift-space”中不存在 ARC,类型系统也发生了变化。

如何将我的流转换为

然后在调用后将它们转换回NSStream子类CFStreamCreatePairWithSocketToHost

0 投票
4 回答
750 浏览

ios - __bridge_transfer 在 NULL 对象上是否有效

假设一个方法CFErrorRef通过指针返回 a 。这个返回的错误可能是NULL. 那么执行静止不动是否安全,__bridge_transfer或者我应该检查NULL.

例如

我在文档和文档中没有看到任何提及这一点的CFRelease具体说明This value must not be NULL. https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFTypeRef/Reference/reference.html#//apple_ref/c/函数/CFRelease