我有一个代码示例,从当前对象得到SEL

SEL callback = @selector(mymethod:parameter2);

我有一种方法

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

现在我需要移动mymethod到另一个物体,比如myDelegate.

我试过:

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

但它不会编译.

推荐答案

SEL是Objective-C中表示 Select 器的类型.@selector()关键字返回您描述的SEL.它不是函数指针,不能传递任何对象或任何类型的引用.对于 Select 器(方法)中的每个变量,必须在对@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

Select 器通常被传递给委托方法和回调,以指定在回调期间应该对特定对象调用哪个方法.例如,创建计时器时,回调方法的具体定义如下:

-(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;
}

在本例中,您指定每隔30秒用myTimerCallback向对象obj发送一次消息.

Objective-c相关问答推荐

将 NSMutableAttributedString 转换为 NSString

如何检测 iPhone 5c 的 colored颜色 ?

iphone keys 串项目在应用程序卸载后仍然存在?

Objective-c中release和dealloc的区别

如何在for (id item in items)objective-c 循环中获取数组索引?

iOS 应用 Display Recorder 如何在不使用私有 API 的情况下录制屏幕?

在我的 UIImageView 的子类中没有调用 drawRect

使用自动布局以编程方式更改框架

在 macOS 10.9+ 上删除 plist 文件不会重置应用程序

改变 setContentOffset:animated: 的速度?

setStatusBarHidden 在 iOS 9.0 中已弃用

检测到与加载的库不匹配的 UUID

try 标记应用程序图标但未获得用户标记应用程序的权限:iOS 8 Xcode 6

iOS:使用设备修饰符加载 xib 文件?

有没有办法更新单个 UITableViewCell 的高度,而无需重新计算每个单元格的高度?

WKWebView 判断 JavaScript 返回值

Objective C 中的调用方法或发送消息

从 iPhone 设备查找当前国家

iOS是静态框架还是动态框架?

Objective-C:如何向 NSURL 添加查询参数?