NSNotificationの仕組みをちょっと自作したいな と思った時にweak参照なNSArrayが欲しくなったのですが、 情報がなかなか無かったのでメモっておきます。
weak参照をするだけのオブジェクトを作る
作り方は簡単で、ほんと「weak参照をするだけのオブジェクトを作る」というひとことだけで説明が住んでしまいます。 つまり、WeakObjectクラスを作り、WeakObjectクラスでは参照先のオブジェクトをweak参照し、 NSArrayではWeakObjectの方をretainする という方法です。 WeakObjectクラス
@interface WeakObject : NSObject{ id _obj; } @property(assign, nonatomic) id obj; @end @implementation WeakObject @synthesize obj = _obj; @end
使い方
id obj; WeakObject \*weak = [[WeakObject alloc] init]; weak.obj = obj; NSArray \*array = [NSArray arrayWithObject:weak]; [weak release];