My understanding from reading previous posts here was that if I use a weak object as a message receiver, that essentially that object is retained when the message is sent, and unretained when it returns - thus insuring that the object is kept alive while used within the method.
Did I misunderstand this - can an object "disappear" in the middle of a method?
No, you understand correctly. It can’t disappear.
If the answer is no, then why the warning?
IMO, it’s a spurious attempt at unnecessary handholding.
Aside from a (perfectly valid) programming pattern where you intentionally send messages to objects in variables that might be nil (and that includes strong as well as weak variables), then the rationale is that sending the message via a weak variable *suggests* that you’re expecting it to be non-nil — if you were expecting it to be nil, why send the message? — and therefore it might fail to have the desired effect.
This is a terribly weak rationale, at best, but the warning is there, for those who wish to use it. (One possibly valid use might be to turn it on temporarily, do a build, and use the warnings to check if in fact there are cases where you forgot to deal with the case where the variable is unexpectedly nil.)
A sister warning, "CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK", warns on repeated use of a weak object within a method.
This one is a bit more useful. Presumably it catches code like this:
in which some people don’t notice the logical flaw.