DIコンテナであるCocoaDIをバージョンアップしました。
今回の目玉は、プールオブジェクトです。
これは、同じオブジェクトを何度も再利用したり、複数の箇所で共有したりする場合に使います。
プールオブジェクトを使えば、必要なときにobjectForName:でコンテナからオブジェクトを取り出し、不要になったらreturnObject:でコンテナにオブジェクトを返すことで、同じオブジェクトを何度も再利用することができます。オブジェクトを新規に生成するか、プールしてあるオブジェクトを使うかは、objectForName:が判断します。
プールオブジェクトのもう一つの活用法は、オブジェクトの共有です。
生成されるプールオブジェクトには、数量を制限することができ、たとえば5つのオブジェクトを10個のスレッド間で使い回すようなことができます。オブジェクトの取得にlimitPoolObjectForName:を使えば、上限に達してオブジェクトが取得できないスレッドをロックし、他のスレッドがreturnObject:したときにロックが解除されます。
その他の新機能として、これまで未実装だったlong long、double、NSInteger、Class、SEL、NSData、NSDateの各パラメタータイプが実装されました。
ただし、SEL型については、プロパティーインジェクションに使えません。Key Value CodingがSEL型をサポートしていないためです。以前は、Class型もサポートされていなかったのですが、MacOSX10.5からサポートされました。
その他の変更点として、GCのサポートを必須から有効に変更しました。当初は「これからは、Objective-CもGCが標準の時代だぜー」とか思ってたのですが、やっぱりもとの参照カウント方式に戻して、GCを使うかどうかは、CocoaDIを使う人の自由にすることにしました。