我知道,我可以在NSObject和其他子类的swift中使用autorelease块,但是为什么我不能在SwiftObject中使用它(请参阅链接并停止减去我=))? SwiftObject和NSObject之间有什么根本区别?如果autoreleasepool不起作用,SwiftObject如何与ARC一起使用?
链接:
stackoverflow.com/a/25880106/3527461
答案 0 :(得分:1)
通过“ SwiftObject”,我假设您的意思是“一个未桥接到Objective-C的Swift对象。”
对于那些对象,几乎不需要自动释放池。创建自动释放的概念是为了简化某些手动保留计数的情况,最重要的是,当您返回一个值时,但是您不希望强迫调用方对其调用-release
,因为那样会很麻烦。因此,您将-release
安排为“在将来的某个时间”称为“自动释放”。
但是使用ARC,这实际上不是必需的。编译器乐于完成繁琐的工作,在需要的所有位置添加额外的release
调用,优化器乐于将它们从不需要的所有位置撤回。由于您无法在Swift中创建手动的保留计数代码,因此不需要特别的语言来支持自动发布之类的便利系统。
这并不是说非ObjC Swift对象不会在自动释放池中结束;它们仍然可以(尽管通常是由于某种隐式桥接)。但是程序员不必担心。