軽量で再利用可能なデリゲート モデルのオブジェクト + セレクター ホルダーとして機能する Callback クラスを作成しました。コードは次のとおりです。
#import <Foundation/Foundation.h>
@interface Callback : NSObject {
id obj;
SEL method;
}
@property(nonatomic,assign) id obj;
@property(nonatomic,assign) SEL method;
+(Callback*) new:(id) obj1 :(SEL)method1;
@end
そして、.m...
#import "Callback.h"
@implementation Callback
@synthesize obj;
@synthesize method;
+(Callback*) new:(id) obj1 :(SEL)method1{
Callback * cb = [[Callback alloc] init];
cb.obj= obj1;
cb.method= method1;
return [cb autorelease];
}
@end
アイデアは、[Callback new:self :@selector(mymethod:)] を渡すか、重いプロトコルの実装の代わりにコールバックの NSArray を渡すことができるということです。実際の動作例を次に示します。
-(void) storeInCache:(NSArray*) contacts{
if (contacts != nil){
// TODO
}
}
- (void)viewDidLoad{
[self.service request_getContacts:[Callback new:self :@selector(storeInCache:)]];
// can fire off more requests on the common service class here
// as long as I give separate Callback method references
}
私はそれを使用して、大量の非同期メソッド要求を実行する HTTP サービス クラスにパススルーしています。これで、私のサービス クラスは、非同期メソッドが返されたときに呼び出さなければならない Callback obj への弱い参照 (割り当て) を保持します。「Callback」オブジェクトが現在ゾンビであるかどうかをその時点で確認するにはどうすればよいですか? 私の一般的なアプローチはひどいですか?