2つの定義は同じではありません。
絶対違う。あなたが指摘した2つの定義の主な違いは、「他の誰かと同じくらい」です。重要なのは「他の誰か」です。
以下を検討してください。
__strong id strongObject = <some_object>;
__weak id weakObject = strongObject;
これで、への2つのポインタが得られました。1 <some_object>つは強い、もう1つは弱いです。そのように設定strongObjectした場合nil:
strongObject = nil;
次に、概説したルールを実行すると、次の質問を自問することになります。
強力:「これ以上指さなくなるまで、これをヒープ内に保持してください」
strongObject<some_object>これ以上は指しません。したがって、それを保持する必要はありません。
弱点:「他の誰かが強く指摘している限り、これを維持する」
weakObjectまだを指してい<some_object>ます。しかし、他の誰もそれを指さないので、このルールはそれを維持する必要がないことも意味します。
その結果、<some_object>割り当てが解除され、ランタイムがサポートしている場合(LionおよびiOS 5以降)、weakObject自動的にに設定されnilます。
次に、そのように設定weakObjectした場合にどうなるかを考えますnil。
weakObject = nil;
次に、概説したルールを実行すると、次の質問を自問することになります。
強力:「これ以上指さなくなるまで、これをヒープ内に保持してください」
strongObjectを指し<some_object>ます。したがって、それを保持する必要があります。
弱点:「他の誰かが強く指摘している限り、これを維持する」
weakObjectを指さない<some_object>。
結果は、ある<some_object>されていない割り当て解除、しかしweakObjectだろうnilポインタ。
[想定しているすべてのことは<some_object>、別の場所の別の強力な参照/「保持」される他の手段によって指されていないことに注意してください]