我如何声明一个具有带选择器的方法/消息的类,存储选择器的值,然后稍后调用选择器?
即如果它被称为SomeObject它将被调用如下:
-(id) init {
// normal stuff here
o = [[SomeObject alloc] init];
return self;
}
-(void) checkSomething {
[o checkSomethingWithResponse: @selector(answer:)]
}
-(void) answer: (int) value {
NSLog(@"Check complete: %d", value);
}
Run Code Online (Sandbox Code Playgroud)
(对不起,我知道这可能是RTFM,但我自己找不到任何信息)
所述SomeObject类需要一个参考回对象,以传递消息.
这几乎就是委托模式; 查看实现细节.
(请注意,委托模式通常允许委托的所有方法都是可选的.在这种情况下,如果需要-answer:,这更像是UITableViewDataSource或NSTableView的数据源.但是实现的细节只是就像委托模式一样,你可能不需要测试以查看对象是否实现了方法).
或者,假设您确实需要使用整数值发送的目标/选择器(目标/操作,在Cocoa用语中)对:
我建议重新声明-answer:as:
- (void) answer: (NSNumber *) aValue;
Run Code Online (Sandbox Code Playgroud)
这避免了处理非对象参数的需要.
在你的SomeObject类中,你有类似的东西:
[myAnswerer performSelector: myAnswererSelector withObject: [NSNumber numberWithInt: 1]];
Run Code Online (Sandbox Code Playgroud)
你甚至可以将myAnswerer和myAnswererSelector声明为:
@property(retain) MyAnswererClass *myAnswerer;
@property SEL myAnswererSelector;
Run Code Online (Sandbox Code Playgroud)
然后在SomeObject的实现中使用@synthesize来合成setter/getter.
请注意,在SnowLeopard上,使用Blocks可以更好地解决所有这些问题......
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |