gpt4 book ai didi

objective-c - 方法和选择器有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 11:23:36 25 4
gpt4 key购买 nike

Objective-C 中的方法、选择器和消息有什么区别?

最佳答案

这是一个很好的问题。

  • Selector - Selector 是方法的名称。您对这些选择器非常熟悉:allocinitreleasedictionaryWithObjectsAndKeys:setObject :forKey: 等。注意冒号是选择器的一部分;这就是我们如何确定此方法需要参数的方式。此外(尽管非常罕见),您可以使用这样的选择器:doFoo:::。这是一个接受三个参数的方法,您可以像 [someObject doFoo:arg1 :arg2 :arg3] 一样调用它。选择器组件的每个部分之前不要求有字母。正如我所说,这非常罕见,您不会发现它在 Cocoa 框架中使用。您可以直接在 Cocoa 中使用选择器。它们的类型为 SEL:SEL aSelector = @selector(doSomething:)SEL aSelector = NSSelectorFromString(@"doSomething:");

  • Message - 消息是一个选择器和您发送的参数。如果我说 [dictionary setObject:obj forKey:key],那么“消息”就是选择器 setObject:forKey: 加上参数 objkey。消息可以封装在 NSInvocation 对象中以供以后调用。消息被发送到接收者。 (即“接收”消息的对象)。

  • 方法 - 方法是选择器和实现(以及随附的元数据)的组合。 “实现”是实际的代码块;它是一个函数指针(一个IMP)。可以使用 Method 结构在内部检索实际方法(可从运行时检索)。


其他一些你没有要求的相关事情:

  • 方法签名 - 方法签名表示方法返回和接受的数据类型。它们可以在运行时通过 NSMethodSignature 和(在某些情况下)原始 char* 来表示。

  • 实现 - 方法的实际可执行代码。它在运行时的类型是一个IMP,它实际上只是一个函数指针。 iOS 4.3 包含将 block 转换为IMP 的新功能。这真的很酷

要实现的有趣的事情之一是方法(选择器)的名称与方法(IMP)的实现不同。这意味着如果您有胆量,您可以交换它们。您还可以在运行时添加和删除方法,因为您所做的只是编辑哈希表中的条目:键是选择器,值是方法的 IMP。这使您可以做一些非常疯狂和迷幻的事情。这不适合胆小的人。 :)

关于objective-c - 方法和选择器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608476/

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