How to I pass @selector as a parameter?

后端 未结 5 1077
[愿得一人]
[愿得一人] 2021-01-30 07:00

For the method:

[NSThread detachNewThreadSelector:@selector(method:) toTarget:self withObject:(id)SELECTOR];

How do I pass in a @selector? I tr

5条回答
  •  长发绾君心
    2021-01-30 07:19

    The problem here isn't passing a selector to a method, per se, but passing a selector where an object is expected. To pass a non-object value as an object, you can use NSValue. In this case, you'll need to create a method that accepts an NSValue and retrieves the appropriate selector. Here's an example implementation:

    @implementation Thing
    - (void)method:(SEL)selector {
        // Do something
    }
    
    - (void)methodWithSelectorValue:(NSValue *)value {
        SEL selector;
    
        // Guard against buffer overflow
        if (strcmp([value objCType], @encode(SEL)) == 0) {
            [value getValue:&selector];
            [self method:selector];
        }
    }
    
    - (void)otherMethodShownInYourExample {
        SEL selector = @selector(something);
        NSValue *selectorAsValue = [NSValue valueWithBytes:&selector objCType:@encode(SEL)];
        [NSThread detachNewThreadSelector:@selector(methodWithSelectorValue:) toTarget:self withObject:selectorAsValue];
    }
    @end
    

提交回复
热议问题