是否可以使用SWIFT使用手动内存管理(而不是自动引用计数)编写应用程序?
我可以使用Swift调用retain
和release
吗?
答案 0 :(得分:11)
您可以在retain
值上致电release
和Unmanaged<T>
。 Unmanaged
基本上是ARC管理之外的对象指针。但您必须转换为托管指针才能与Cocoa API进行交互。
但除非在特殊情况下,否则你不想这样做。并且没有转换为ARC的项目不是这种情况。
答案 1 :(得分:2)
答案 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是开源的,我们可以修改它以使其在未来更加灵活。