Is callback an autoclosure, or just a regular argument? -Kenny
> On Mar 3, 2017, at 1:14 PM, Alex Johnson via swift-evolution > <swift-evolution@swift.org> wrote: > > Hi list members, > > During code review today, I noticed a really subtle memory leak that looked > like: > > self.relatedObject = RelatedObject(callback: relatedObjectDidFinish) > > Where `relatedObject` is a strong reference, `callback` is an escaping > closure, and `relatedObjectDidFinish` is a method of `self`. From a memory > management perspective, this code is equivalent to: > > self.relatedObject = RelatedObject(callback: { > self.relatedObjectDidFinish }) > > In the second example, an explicit `self.` is required. It’s my understanding > that this is to highlight that the closure keeps a strong reference to > `self`. But, when passing a method, there is no such requirement, which makes > it easier to accidentally create a retain cycle. > > This made me wonder if an explicit `self.` should be required when passing a > method as an escaping closure. And whether that would help in the same way > that the explicit `self.` *inside* the closure is intended to. > > If it were required, the code in the first example would be: > > self.relatedObject = RelatedObject(callback: self.relatedObjectDidFinish) > > What do you think? > > Alex Johnson > ajohn...@walmartlabs.com <mailto:ajohn...@walmartlabs.com> > ajohnson on Slack > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org <mailto:swift-evolution@swift.org> > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution