gpt4 book ai didi

objective-c - 从带有参数的方法名称创建选择器

转载 作者:IT老高 更新时间:2023-10-28 11:30:33 25 4
gpt4 key购买 nike

我有一个从当前对象获取 SEL 的代码示例,

SEL callback = @selector(mymethod:parameter2);

我有一个类似的方法

 -(void)mymethod:(id)v1 parameter2;(NSString*)v2 {
}

现在我需要将 mymethod 移动到另一个对象,比如 myDelegate

我试过了:

SEL callback = @selector(myDelegate, mymethod:parameter2);

但它不会编译。

最佳答案

SEL 是一种在 Objective-C 中表示选择器的类型。 @selector() 关键字返回您描述的 SEL。它不是函数指针,您不能将任何对象或任何类型的引用传递给它。对于选择器(方法)中的每个变量,您必须在对@selector 的调用中表示它。例如:

-(void)methodWithNoParameters;
SEL noParameterSelector = @selector(methodWithNoParameters);

-(void)methodWithOneParameter:(id)parameter;
SEL oneParameterSelector = @selector(methodWithOneParameter:); // notice the colon here

-(void)methodWIthTwoParameters:(id)parameterOne and:(id)parameterTwo;
SEL twoParameterSelector = @selector(methodWithTwoParameters:and:); // notice the parameter names are omitted

选择器通常传递给委托(delegate)方法和回调,以指定在回调期间应在特定对象上调用哪个方法。例如,当你创建一个定时器时,回调方法具体定义为:

-(void)someMethod:(NSTimer*)timer;

因此,当您安排计时器时,您将使用@selector 指定对象上的哪个方法实际上将负责回调:

@implementation MyObject

-(void)myTimerCallback:(NSTimer*)timer
{
// do some computations
if( timerShouldEnd ) {
[timer invalidate];
}
}

@end

// ...

int main(int argc, const char **argv)
{
// do setup stuff
MyObject* obj = [[MyObject alloc] init];
SEL mySelector = @selector(myTimerCallback:);
[NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
// do some tear-down
return 0;
}

在这种情况下,您指定对象 obj 每 30 秒向 myTimerCallback 发送消息。

关于objective-c - 从带有参数的方法名称创建选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/297680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com