Objective-C 中的SEL

在 Objective-C 中,SEL(Selector)是一种用来表示方法的类型。

它实际上是一个指向方法的指针,用于在运行时动态调用方法。

下面是一个使用 SEL 的代码示例:

复制代码
#import <Foundation/Foundation.h>

@interface MyClass : NSObject
- (void)method1;
- (void)method2;
@end

@implementation MyClass
- (void)method1 {
    NSLog(@"This is method1");
}

- (void)method2 {
    NSLog(@"This is method2");
}
@end

int main() {
    SEL selector1 = @selector(method1);
    SEL selector2 = @selector(method2);
    
    MyClass *myObject = [[MyClass alloc] init];
    
    // 通过 SEL 调用方法
    if ([myObject respondsToSelector:selector1]) {
        IMP imp = [myObject methodForSelector:selector1];
        void (*func)(id, SEL) = (void *)imp;
        func(myObject, selector1);
    }
    
    if ([myObject respondsToSelector:selector2]) {
        IMP imp = [myObject methodForSelector:selector2];
        void (*func)(id, SEL) = (void *)imp;
        func(myObject, selector2);
    }
    
    return 0;
}
  1. 上述代码定义了一个名为 `MyClass` 的类,其中包含了两个方法 `method1` 和 `method2`
  2. 在 `main` 中使用 `SEL` 类型变量 `selector1` 和 `selector2` 分别指向 `method1`和 `method2` 方法
  3. 然后,我们创建了一个 `MyClass` 对象 `myObject`。
  4. 通过调用 `[myObject respondsToSelector:]` 方法可以判断该对象是否实现了对应的方法。
  5. 如果实现了,我们可以使用 `[myObject methodForSelector:]` 方法获取方法的实现 `IMP`,然后将其转换为函数指针,并调用该函数。

最终的输出结果将会是:

复制代码
This is method1
This is method2
相关推荐
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第九章
开发语言·网络·python·安全·网络安全·密码学·ctf
砚底藏山河1 小时前
Python量化开发:2026最佳实时股票数据API接口推荐与对比
开发语言·windows·python
AlunYegeer2 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端
hixiong1233 小时前
C# OpenvinoSharp使用DINOv2模型进行图像相似度计算
开发语言·c#
DFT计算杂谈3 小时前
自动化脚本一键绘制三元化合物相图
java·运维·服务器·开发语言·前端·python·自动化
EW Frontier4 小时前
6G ISAC新范式:基于智能漏波天线的Wi‑Fi通感一体化系统设计与实测【附MATLAB+python代码】
开发语言·python·matlab·music·isac·doa·wi‑fi
楼田莉子4 小时前
Linux网络:NAT_代理
linux·运维·服务器·开发语言·c++·后端
froginwe114 小时前
jEasyUI 创建基础树形网格
开发语言
lijfrank5 小时前
Mac卸载NTFS工具后无法读取硬盘?我的2天排错心路与终极解决方案
macos·ntfs
Victory_20255 小时前
c#定时器顺序控制写法
开发语言·c#·c#顺序控制+定时器