gpt4 book ai didi

objective-c - 在 Objective-C 中实现调度表 : how to declare an array of selectors

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:58 24 4
gpt4 key购买 nike

我正在尝试实现一个调度表,以便我可以使用以下示例代码调用一个选择器:

NSInteger i = 2;
[myObject performSelector:selectors[i]];

我正在尝试存储影响调用 API 方法的用户首选项。现在,我使用选择器的字符串名称并使用 NSSelectorFromString,但这有点困惑。如果我使用调度表,那么我可以存储一个枚举。

如何在 Objective-C 中制作选择器数组或调度表?

编辑:

当我尝试将选择器数组设置为属性时,编译器会报错。 @property SEL[] 无法编译。

编辑2:

我正在使用 my KosherCocoa API库,我想根据保存的用户设置一次调用一个方法。我正在保存和读取 Plist 文件。

最佳答案

您可以使用 SEL 类型来保存选择器。简单地:

SEL dispatchTable[3] = { @selector(doThis:), 
@selector(doThat:),
@selector(doTheOther:)
};

对于您的编辑,请使用选择器的 NSArray/NSDictionary/etc 作为您的属性。不允许在 Objective C 中使用 C 数组作为属性;它们不是受支持的类型之一(它们是 ObjC 对象、CF 类型和基本的 C“普通旧数据”类型。)

好的,在我们下面的评论中,您需要将选择器包装在 NSValue 中,以允许您在 objc 容器中使用它(因为 SEL 是一个 C 指针类型):

NSMutableArray * dispatchTable2 = [[NSMutableArray alloc] initWithCapacity:3];
SEL selIn = @selector(doThis:);

// Wrap the selector in an NSValue instance
[dispatchTable2 addObject:[NSValue valueWithPointer:selIn]];

// On extracting:
NSValue * valOut = [dispatchTable2 objectAtIndex:0];
SEL selOut = [[dispatchTable2 objectAtIndex:0] pointerValue];
[anObject performSelector:selOut];

现在您的表是一个存储为属性或 ivar 的 objc 容器,您使用 NSValueSEL 指针与 valueWithPointer: 包装起来并使用 pointerValue 获取 SEL

关于objective-c - 在 Objective-C 中实现调度表 : how to declare an array of selectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563209/

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