【问题标题】:Does using(){...} in C# serve the same purpose as autoreleasepool{...} in Cocoa?C# 中的 using(){...} 与 Cocoa 中的 autoreleasepool{...} 的用途相同吗?
【发布时间】:2016-12-02 22:31:04
【问题描述】:

我在 C# 中发现了 using(){} --> Uses of "using" in C#

我知道autorelease{}using(){} 不一样,因为 cocoa 使用 ARC 而 C# 使用 GC。 --> Is it necessary to use autoreleasepool in a Swift program?

我只是想从使用过这两种方法的人那里确认它们是否确实起到了相同的目的。

编辑:我发现了一个第三方 C# 编译器,它似乎将这些想法连接在一起。

RemObjects C# 还支持(很少需要)通过 using (__autoreleasepool) 语法手动声明自动释放池。

http://www.elementscompiler.com/elements/hydrogene/cocoa.aspx

C# 中的 using(){...} 与 Cocoa 中的 autoreleasepool{...} 的用途相同吗?

【问题讨论】:

  • 该链接说明了这一点:RemObjects C# 还支持(很少需要)通过 using (__autoreleasepool) 语法手动声明自动释放池。

标签: c# objective-c cocoa nsautoreleasepool


【解决方案1】:

不,它们是不同的。

C# 的 using 语句是关于资源获取和处置的。这通常是外部资源,例如文件,其中获取是打开文件,处置是关闭它。

Objective-C 的自动释放池是关于控制内存对象的生命周期。当池耗尽时,放置在池中的对象被释放,对于默认池,在事件循环的每次迭代结束时。

【讨论】:

  • 因此,虽然 autoreleasepool 也可以释放资源作为其对象超出范围的副作用; C# 的 using() 特定用途是处理资源(关闭连接等),但有一个副作用是让 GC 知道可以回收对象内存?
  • 没有。 C#using 根本不直接与 GC 关联。资源获取可能涉及对象创建,它不需要。资源处理调用Dispose(),它不会通知GC对象不再需要,对象可以继续被使用。实现Disposable 的对象不需要调用自己的Dispose() 作为其终结器的一部分。虽然 using 的典型用法可能涉及资源对象的分配和解除分配,但这是一种使用模式,不是要求。
猜你喜欢
  • 2014-04-28
  • 2014-05-12
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多