> On Oct 25, 2017, at 4:41 AM, David Hart via swift-evolution > <swift-evolution@swift.org> wrote: > > I got bit again by a sneaky memory leak concerning local functions and would > like to discuss a small language change. I vaguely remember this being > discussed in the past, but can’t find the thread (if anybody could point me > to it, I’d appreciate it). Basically, here’s an example of the leak: > > class A { > func foo() { > func local() { > bar() > } > > methodWithEscapingClosure { [unowned self] _ in > self.bar() > local() // this leaks because local captures self > } > } > > func bar() { > } > } > > Its sneaky because local’s capturing of self is not obvious if you’ve trained > your brain to watch out for calls prefixed with self. I would suggest having > the compiler force users to make self capturing explicit, the same way it > does for closures: > > class A { > func foo() { > func local() { > bar() // error: Call to method ‘bar' in function ‘local' requires > explicit 'self.' to make capture semantics explicit > } > > // ... > } > } > > What do you think?
Works for me - Dave Sweeris
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution