繁体   English   中英

为什么选择器不需要将 arguments 传递给带参数的方法?

[英]Why don't selectors need to pass arguments to methods that take parameters?

我正在研究一个项目,试图掌握代码。 我刚刚遇到了一个#selector 据我了解, selectors调用方法(当然,我敢肯定还有更多)。

令我印象深刻的一件事是,即使method本身带有parameterselector调用也不会将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM