我制作了一个回调类,用作轻量级可重用委托模型的对象+选择器持有者。这是代码:
#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
还有他们...
#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 服务类,该类执行一大堆异步方法请求。现在,我的服务类对异步方法返回时必须调用的回调 obj 保持弱引用(分配)。那时我如何检查“回调”obj现在是否是僵尸?我的一般方法很糟糕吗?