Oh interesting - it looks like when you call [NSAlert beginSheetModalForWindow:completionHandler:], the alert gets retained by the parent window's attachedSheet property. So you're right, no issues there either. Now that you've brought it up, I have to say I've never worried about the alert being released too early in my code when I use beginSheetModalForWindow - I never gave it much thought because it just worked.
toggle quoted messageShow quoted text
On Feb 17, 2020, at 12:54 AM, Graham Cox <firstname.lastname@example.org> wrote:
That is the case I’m talking about and no, it works fine even if you don’t “worry” about the lifecycle.
Just alloc + init + autorelease, then beginSheet…. it works, it has always worked since completion blocks were introduced.
It also works for the -runModal case also, you can autorelease prior to that call and that also doesn’t cause a lifecycle issue.
You can certainly “worry” about extending the lifecycle into the completion block if you want, except the unbalanced release will throw a compiler warning. That in itself shows how unnecessary it is to bother with.
TL;DR: Normal rules apply, stop overthinking this! Just because an NSAlert has some unusual asynchronous lifespan doesn’t mean it needs to be treated any differently from any other object you instantiate.