3 ms·
You can generally do something like: Task { [weak self] in await foo() self?.bar() // self may be nil } That is, you can just make a n
by ninkendo 5y ago
You can generally do something like:
Task { [weak self] in
await foo()
self?.bar() // self may be nil
}
That is, you can just make a new task which awaits on something and then does more work, and that Task can be tagged with weak self so that self can be freed.
- mojuba 5y agoSo basically no way to do the same with await, other than of course declaring a weak local var.
- ninkendo 5y agoIf you’re await’ing a variable directly in the same scope, of course self will be retained, you’re still running inside self’s scope. I guess I’m confused by the question… if you want to await something and allow self to be freed in the process, you can use Task{ [weak self] } and then return early. If you don’t want to return early, you can’t really release self yet, since the scope shouldn’t outlive self.