以前記事にしたautoreleasepoolから例外を投げられるようにするを更に使いやすい形にして、
sgr-ksmt/EnhancedAutoreleasePool
として公開しました!
前回紹介したtry
が可能になるものに加えて、autoreleasepool()
内で値を返すことができようにし、更にtry可能なautoreleasepool()
も準備しました。
定義としてはこんな感じです。
public func autoreleasepool(@noescape code: () throws -> ()) rethrows
public func autoreleasepool<V>(@noescape code: () throws -> V?) rethrows -> V?
public func autoreleasepool<V>(@noescape code: () throws -> V) rethrows -> V
これで、以下の様な書き方もできます。
let value = autoreleasepool {
doHighPressureMemoryTask()
return "value"
}
autoreleasepool()の機能により局所的にメモリの圧迫を抑えつつ、必要な値を返戻することができます。
次回あたりに、あまり詳しく解説されているところがないので、throwsとrethrowsの違いでもまとめてみることにします。