> 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

Reply via email to