配列オブジェクト

カウンタ管理方式を使用する場合のオーナーシップについて。
配列オブジェクトは、格納されたオブジェクトにretainメッセージを送って保持し、配列オブジェクトが解放される際には配列に格納されているすべてのオブジェクトにreleaseメッセージが送信される。(指定した要素を削除する場合は、指定された要素に対してreleaseメッセージが送信される)
そのため、何らかのオブジェクト(たとえばobjとする)が下記のようなコードを実行した場合、リファレンスカウンタが引数部分のallocで+1、配列arrにNSObjectが格納される際に+1される。このとき、配列arrを解放すると、arrが持っていたオーナーシップは放棄されるが、objのオーナーシップは残ったままになり、要素を解放できない。

NSArray *arr = [NSArray alloc] initWithObjects:[[NSObject alloc] init], [[NSObject alloc] init], nil];