[英]Why don't selectors need to pass arguments to methods that take parameters?
我正在研究一个项目,试图掌握代码。 我刚刚遇到了一个#selector
。 据我了解, selectors
调用方法(当然,我敢肯定还有更多)。
令我印象深刻的一件事是,即使method
本身带有parameter
, selector
调用也不会将argument
传递给method
。 代码工作正常,所以我认为这是selector
的正常行为。 这是代码示例:
[Communication sendVerifyNumber:ps.address verificationCode:@""
withCallbackMethod:@selector(numberVerificationCallCompleted:)
callbackFailMethod:@selector(numberVerificationCallFailed:) onObject:self];
}
和numberVerificationCallCompleted
:
-(void)numberVerificationCallCompleted:(NSNumber*)responseNumber{...}
所以,我的问题是,这与selectors
有关吗? 我的意思是,这就是它们被使用的原因吗? 它是如何工作的? 该method
仍然需要一个argument
才能正常工作,所以它必须来自某个地方,对吧?
选择器描述了 Objective-C class 中的方法,允许您在稍后的时间点调用它。 参数在调用时传递,而不是在描述时传递。
您将选择器存储在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:
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.