レスどうもありがとうございます。
C だと free() した後の動作は保証されないし、そもそもするなというのはわかります。
(自分でもCを書くときはそうしている)

Objective-C の場合、[hoge release]; をした場合、
ほかにもオーナーシップを持っている人がいて、
参照カウンタが1下がっただけでまだ生き残っているのか、
0 になったから解放された(or 解放されるマークがついた)のかがわからないのではとおもいます。

こういうシチュエーションがあるかどうかはわからないけど、
[hoge rekease]; したあとに、
if (まだ hoge が生きている) {
 // ある処理をしたい
} else {
 // いなくなったので、別の処理をしたい
}

といった判定をしたくなるようなことはないかと思って。