当我桥接一个Objective C对象时,我是否必须做一些特殊的事情来防止内存泄漏?

pla*_*ker 5 memory-management casting objective-c automatic-ref-counting

我正在尝试将类型idNSInvocation对象传递给对象.编译器建议我像这样做一个桥接演员:

[invocation setArgument:(__bridge void *)(argument) atIndex:idx];
Run Code Online (Sandbox Code Playgroud)

这样可以,我应该做些什么来防止内存泄漏或其他问题吗?

bgf*_*nd0 6

__bridge 将允许您(以松散的术语)在Objective-C和C之间来回切换,而不会对对象的内存管理产生任何影响.

__bridge_transfer用于通过更改对象的所有权将对象从C传输到Objective-C.它减少了CF保留计数并将内存管理交给ARC,这应该足够智能,以便随后以必要的方式保留对象.

__bridge_retained基本上是__bridge_transfer它的反转,它将从Objective-C传递到C并在该过程中增加对象的保留计数.ARC将不再对该对象感兴趣.