斯威夫特没有ARC

时间:2014-08-28 06:48:18

标签: memory-management swift automatic-ref-counting

是否可以使用SWIFT使用手动内存管理(而不是自动引用计数)编写应用程序?

我可以使用Swift调用retainrelease吗?

3 个答案:

答案 0 :(得分:11)

您可以在retain值上致电releaseUnmanaged<T>Unmanaged基本上是ARC管理之外的对象指针。但您必须转换为托管指针才能与Cocoa API进行交互。

但除非在特殊情况下,否则你不想这样做。并且没有转换为ARC的项目不是这种情况。

答案 1 :(得分:2)

注意2014年8月29日 - 我的回答不正确,有可能,请看@newacct回答

不,你不能。详细了解Automatic Reference Counting

你必须有一个很好的理由不想要ARC

答案 2 :(得分:0)

目前无法使用objc(例如,每个带有编译器标志的文件)以swift方式关闭ARC for swift。正如其他人所指出的那样,“未经管理的”这样做是不可能的。和&#39; UnsafeMutablePointer&#39; API,旨在与C API交互,允许您在某些情况下使用ARC。但是这些API很麻烦,需要您对代码进行实质性更改(例如,与数组交互)。

Swift人员通常希望您重写代码以使用结构并尽可能避免引用问题。但这使得移植现有代码变得痛苦。

我的其他帖子中有一些关于ARC性能的建议:Swift Dictionary slow even with optimizations: doing uncessary retain/release?但没有一个非常令人满意。

我甚至编写了代码来对已编译的mach-O目标代码进行后处理,并从某些类中删除ARC swift_retain / release调用作为实验。但是我真的希望现在Swift是开源的,我们可以修改它以使其在未来更加灵活。