gpt4 book ai didi

ios - 为什么创建 NSInvocation 必须指定两次选择器

转载 作者:可可西里 更新时间:2023-11-01 03:51:50 27 4
gpt4 key购买 nike

下面是我从Apple的“Timer Programming Topics”看到的示例代码:

NSMethodSignature *methodSignature = [self
methodSignatureForSelector:@selector(invocationMethod:)];
NSInvocation *invocation = [NSInvocation
invocationWithMethodSignature:methodSignature];
[invocation setTarget:self];
[invocation setSelector:@selector(invocationMethod:)];
NSDate *startDate = [NSDate date];
[invocation setArgument:&startDate atIndex:2];

如您所见,我们必须指定 invocationMethod:一次在 NSMethodSignature 中,然后第二次在 NSInvocation设置选择器。对我来说,这似乎是多余的,苹果这样设计有什么理由吗?

最佳答案

选择器只是一个字符串,方法的名称。它不包含有关参数类型或返回类型的信息。方法签名只是类型;它不包含有关方法名称的信息。它们完全不相交。

尽管在您的情况下,您通过使用 methodSignatureForSelector: 询问目标对象来创建方法签名,但您不应假设人们总是希望这样做。

您可以直接从类型编码字符串构造方法签名。您可以从另一个方法的签名中获取它并将其应用于此方法。等等。根据特定的用例,直接向对象询问方法签名可能不合适,因为对象可能还没有实现该方法,稍后会在调用时动态添加它。灵活地分别指定类型和方法名称可能有多种原因。

关于ios - 为什么创建 NSInvocation 必须指定两次选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480919/

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