为什么SwiftObjects不能与自动释放池块一起使用?

时间:2019-03-07 18:02:35

标签: ios objective-c swift

我知道,我可以在NSObject和其他子类的swift中使用autorelease块,但是为什么我不能在SwiftObject中使用它(请参阅链接并停止减去我=))? SwiftObject和NSObject之间有什么根本区别?如果autoreleasepool不起作用,SwiftObject如何与ARC一起使用?

链接:

  1. stackoverflow.com/a/25880106/3527461

  2. https://devstreaming-cdn.apple.com/videos/wwdc/2014/418xxtihju1a7v4/418/418_improving_your_app_with_instruments.pdf

1 个答案:

答案 0 :(得分:1)

通过“ SwiftObject”,我假设您的意思是“一个未桥接到Objective-C的Swift对象。”

对于那些对象,几乎不需要自动释放池。创建自动释放的概念是为了简化某些手动保留计数的情况,最重要的是,当您返回一个值时,但是您不希望强迫调用方对其调用-release,因为那样会很麻烦。因此,您将-release安排为“在将来的某个时间”称为“自动释放”。

但是使用ARC,这实际上不是必需的。编译器乐于完成繁琐的工作,在需要的所有位置添加额外的release调用,优化器乐于将它们从不需要的所有位置撤回。由于您无法在Swift中创建手动的保留计数代码,因此不需要特别的语言来支持自动发布之类的便利系统。

这并不是说非ObjC Swift对象不会在自动释放池中结束;它们仍然可以(尽管通常是由于某种隐式桥接)。但是程序员不必担心。