我正在研究一个项目,试图掌握代码。我刚遇到#selector
。据我了解,selectors
调用方法(当然,我敢肯定还有更多方法)。
令我震惊的是,即使selector
本身接受了argument
,method
调用也没有将method
传递给parameter
。该代码工作正常,因此我认为这是使用selector
的正常行为。这是代码示例:
[Communication sendVerifyNumber:ps.address verificationCode:@""
withCallbackMethod:@selector(numberVerificationCallCompleted:)
callbackFailMethod:@selector(numberVerificationCallFailed:) onObject:self];
}
还有numberVerificationCallCompleted
:
-(void)numberVerificationCallCompleted:(NSNumber*)responseNumber{...}
所以,我的问题是,selectors
是不是这样?我的意思是,为什么要使用它们?以及它如何运作? method
仍需要argument
才能正常工作,所以它必须来自某个地方,对吧?
答案 0 :(得分:2)
选择器描述 Objective-C类中的方法,使您可以在以后的时间点调用它。参数在调用时传递,而不是在描述时传递。
您将选择器存储为SEL
类型,并使用performSelector:
进行调用,使其非常适合用作回调。
上面显示的方法将执行以下操作:
- (void)sendVerifyNumber:(NSString*)address
verificationCode:(NSString*)verificationNumber
withCallbackMethod:(SEL)callbackMethod
callbackFailMethod:(SEL)failedCallbackMethod
onObject:(id)callbackObject
{
BOOL success = doWhateverIDo();
if (success) {
[callbackObject performSelector:callbackMethod
withObject:someArgumentToPassback];
} else {
[callbackObject performSelector:failedCallbackMethod
withObject:someArgumentToPassback];
}
}
注意:如果选择器采用零,一个或两个参数(分别使用performSelector:
,performSelector:withObject:
和performSelector:withObject:withObject:
,则只能调用选择器描述的方法。