首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C中的选择器是另一种向对象发送消息的方式吗?

是的,Objective-C中的选择器是一种向对象发送消息的方式。选择器是一种用于标识方法的数据类型,它由方法名和参数类型组成。通过选择器,我们可以在运行时动态地向对象发送消息,而不需要提前知道方法的具体实现。

选择器在Objective-C中有广泛的应用。它可以用于实现委托模式、消息转发机制、动态方法解析等。通过选择器,我们可以实现对象之间的松耦合,提高代码的灵活性和可维护性。

在Objective-C中,可以通过@selector关键字来创建选择器。例如,@selector(methodName:)可以创建一个选择器,表示名为methodName:的方法。选择器可以作为参数传递给其他方法,也可以通过performSelector:方法来调用对应的方法。

腾讯云提供了丰富的云计算产品和服务,其中与Objective-C开发相关的产品包括:

  1. 云服务器(CVM):提供可扩展的计算能力,支持在云端部署和运行Objective-C应用。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供高可用、可扩展的MySQL数据库服务,可用于存储和管理Objective-C应用的数据。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云存储(COS):提供安全、稳定、低成本的对象存储服务,可用于存储和管理Objective-C应用的文件和数据。详情请参考:https://cloud.tencent.com/product/cos

以上是腾讯云提供的一些与Objective-C开发相关的产品,您可以根据具体需求选择适合的产品来支持和扩展您的Objective-C应用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java数组对象

转载此篇文章感觉这篇文章对其结论分析过程很棒。 正文 Java数组对象? Java和C++都是面向对象语言。...那么,我们是不是应该考虑这样一个问题:在面向对象语言中,数组对象? 要判断数组是不是对象,那么首先明确什么对象,也就是对象定义。...2)name在对象只表示一个引用, 也就是一个地址值,它指向一个真实存在字符串对象。在这里严格区分了引用和对象。 那么在Java,数组满足以上条件?...Java数组继承关系 上面已经验证了,数组对象,也就是说可以以操作对象方式来操作数组。并且数组在虚拟机中有它特别的类型。...} Java数组另一种“继承”关系 如下代码正确,却很容易让我们疑惑: String[] s = new String[5]; Object[]

7.1K11

动态Objective-C——关于消息机制与运行时探讨

动态Objective-C——关于消息机制与运行时探讨 一、引言     Objective-C一种很优美的语言,至少在我使用其进行编程过程很享受他那近乎自然语言函数命名、灵活多样方法调用方式以及配合...Objective-C扩展与C面向对象编程语言,然而其方法调用方式又和大多面向对象语言大有不同,其采用消息传递、转发方式进行方法调用。...二、消息发送与转发机制 1.初窥消息发送机制     许多面向对象语言中方法调用都是采用obj.function这样方式,在Objective-C语言中却是采用括号包裹方式进行方法调用,例如[obj...实际上,Objective-C每一句方法调用最后都会转换成一条消息进行发送。一条消息包含3部分内容:方法选择器、接收消息对象以及参数。objc_msgSend函数就是用来发送这种消息。...文件,其中最重要两个方法: //发送消息函数 /* self:消息接收对象 op:方法选择器 ...

75540

Objective-C Runtime编程指南(1)

数据结构捕获类和类别定义以及协议声明信息; 它们包括Objective-C编程语言中定义类和协议以及方法选择器,实例变量模板和从源代码中提取其他信息讨论类和协议对象。...主体运行时功能发送消息功能。 2、NSObject 方法 Cocoa大多数对象都是NSObject类子类,所以大多数对象继承了它所定义方法(值得注意例外NSProxy类)。...这是在运行时选择方法实现方式 - 或者在面向对象编程术语,方法动态绑定到消息。 为了加速消息处理,运行时系统缓存方法selector和地址。...它将问题分解成更小对象,但是以对消息发送者透明方式关联这些对象。 代理对象 转发不仅可以模仿多重继承,而且还可以开发用以代表或“覆盖”更多实体对象轻量级对象。...代理人代表另一个对象,并向其发送消息。 在“Objective-C“远程消息传递”讨论代理就是这样代理。代理负责将消息转发到远程接收方管理细节,确保参数值在连接中被复制和检索,等等。

73320

iOS RunTime之三:消息发送

由上面一章,我们了解了什么RunTime数据结构,下面了解一下Runtime消息发送。...(这就是我们可以nil发送消息原因。) 然后在targetClass根据Selector去找IMP。...消息发送其实就是先确定object接受者对象,然后根据isa指针查找其方法然后跳转过去并执行。 但是编译期间,无法确定object接受者对象。...Objective-C如果Car这个对象发送字符串为flyselector,即使car没有实现fly方法,编译器依然能够通过,但是运行期间则会因为获取不到实际执行方法而抛出异常。...消息发送设计使得编译期间Objective-C非常包容对象所属类。在Objective-C语言中你可以任何包括空指针nil在内对象发你想发消息

49230

iOS RunTime之二:数据结构

我们知道在Objective-C,使用[object doSomething]语法并不会马上执行object接受者对象doSomething方法代码,而是object接受者对发送一条doSomething...cache:一个接收者对象接收到一个消息时,它会根据isa指针去查找能够响应这个消息对象。在实际使用,这个对象只有一部分方法常用,很多方法其实很少用或者根本用不上。...元类(Meta Class) 在Objective-C,所有的类自身也是一个对象,这个对象里面也有一个isa指针,它指向metaClass(元类),这个对象发送消息(即调用类方法)。 ?...Paste_Image.png 从图中看出: 当我们一个对象发送消息时,isa指针会在这个对象所属这个类方法列表查找方法; 一个类发送消息时,isa指针会在这个类meta-class方法列表查找...selector方法选择器,可以理解为区分方法id,而这个id数据结构SEL,即表示一个方法selector指针。 ?

54320

流媒体服务器平台开发SpringBoot整合WebSocket实现服务器浏览器主动发送消息过程方式

Spring Boot 设计目的用来简化新 Spring 应用初始搭建以及开发过程。该框架使用了特定方式来进行配置,从而使开发人员不再需要定义样板化配置。...用我的话来理解,就是 Spring Boot 其实不是什么新框架,它默认配置了很多框架使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。...本文我们来讲一下在进行流媒体服务器平台EasyNVR开发时候,使用SpringBoot整合WebSocket实现服务器浏览器主动发送消息过程方式。 ? 下图代码主要代码: ?...我们在下图输入框内输入服务器IP地址,成功后服务器会返回连接成功提示,连接成功后服务器就可以发送消息了。 ? ? ? ? 下面服务器主动向用户发送消息过程: ? ? 发送成功后界面也会出现提示。

1.7K20

iOS进阶之传递消息

、理解objc_msgSend作用 对象上调用方法用OC术语,叫做“传递消息”。消息有名称或选择子,可以接受参数,而且可能还有返回值。 先理解C语言函数调用方式。...在Objective-C,如果对象传递消息,那就会使用动态绑定机制来决定需要调用方法。...:选择子(选择器) 选择子与参数合起来称为“消息” 编译器看到此消息后,将其转换成一条标准C语言函数调用,所调用函数乃是消息传递机制核心函数,叫做objc_msgSend,其“原型”如下:...如果某函数最后一项操作调用另外一个函数,那么就可以运用“尾调用优化”技术。编译器会生成调转至另一函数所需指令码,而且不会调用堆栈推入新“栈帧”(frame stack)。...给某对象发送消息”(ivoke a message)也就相当于该对象上“调用方法”(call a method)。

74260

js给数组添加数据方式js 数组对象添加属性和属性值

大家好,又见面了,我你们朋友全栈君。...参考:https://www.cnblogs.com/ayaa/p/14732349.html js给数组添加数据方式有以下几种: 直接利用数组下标赋值来增加(数组下标起始值0) 例,先存在一个有...3个数据数组: let arr=[1,2,3]; console.log(arr);  此时输出结果[ 1, 2, 3 ] let arr=[1,2,3]; arr[3]=5; console.log...用 数组名.splice(开始插入下标数,0,需要插入参数1,需要插入参数2,需要插入参数3……)来增加数组数据 let arr=[1,2,3]; //splice(第一个必需参数:该参数开始插入...(3,0,7,8,9) console.log(arr);  此时输出结果[ 1, 2, 3, 7, 8, 9 ]; 因为举例从第3个下标开始,所以是直接在数组最后开始增加数组内容; js 数组对象添加属性和属性值

22.8K20

runtime那些事(一)——runtime基础介绍

二、 runtime 版本 三、 与 runtime 三种交互方式 四、 消息机制基本原理与执行流程 五、 动态解析与消息转发 ---- 一、什么 runtime?...runtime 一套用C语言提供 API,Objective-C 代码最终都会被编译器转化为运行时代码,通过消息机制决定了不同函数调用或转发方式,因此 runtime成为了 Objective-C...---- 三、与 runtime 交互方式 接下来会梳理当 NSObject 类与 runtime 交互时,runtime 如何动态加载新类以及将消息转发给其它对象。 1....,将对象、方法选择器、参数以及返回值等各种信息,都封装到此类对象,再通过invoke函数去执行被调用函数,其思想本质命令者模式展现。...消息转发流程把未识别的消息分发给了其他不同接收对象,又或者将所有未识别消息发送给同一个接收对象,其具体实现方式完全可以自由控制。

1.2K20

《Objective C编程》笔记

c.如果你不拥有某个对象,但是要使用该对象时候,可以发送release消息或者autorelease消息(release会使retain计数立刻减1。...18.在Objective-C,有三种途径可以实现回调。 a.目标-动作(Target-action):在应用开始等待前,要求“当X发生时,指定对象发送某个特定消息。”...这里接收消息对象是目标(Target),消息选择器(selector)动作(action)。...b.辅助对象(Helper objects):在应用开始等待前,要求“当x发生时,遵守相应协议辅助对象发送消息”。...当其中某个通告出现时,指定对象发送特定消息。 19.选择器:当某个对象收到消息,会对象类进行查询,检查是否有与之匹配方法。因此该方法必须非常快速。

57830

iOS:关于WWDC2020-Objective-C运行时改进

在 WWDC2020 Objective-C 运行时改进这个视频提到关于类数据结构一些变化,本文对这个视频提到部分变化进行翻译。...视频中介绍了三个变化: 首先是数据结构变化, Objective-C 运行时会使用它们来追踪类。 其次 Objective-C 方法列表变化。...因为它们可以在运行时进行更改,当 category 被加载时,它可以添加新方法,而且程序员可以使用运行时 API 动态添加它们,而 class_ro_t 只读,所以我们需要在 class_rw_t...二、Objective-C方法列表变化 每一个类都附带一个方法列表,当你在类上编写新方法时,它就会被添加到列表。运行时使用这些列表来解析消息发送。 每个方法都包含三个信息。...接下来方法类型编码 这是一个表示参数和返回类型字符串 它不是用来发送消息 但它是运行时 introspection 和消息 forwarding 所必需东西。

47620

Objective-C Runtime详解

不同元类方法列表类方法集合,由类对象选择器来响应。当一个类发送消息时,objc_msgSend 会通过类对象isa指针定位到元类,并检查元类方法列表(包括父类)来决定调用哪个方法。...记住,当一个消息发送给任何一个对象, 方法检查 从对象 isa 指针开始,然后父类。实例方法在类定义, 类方法 在元类和根类定义。(根类元类就是根类自己)。...消息 前面做了这么多铺垫,现在终于说到了消息了。Objc 中发送消息括号 [] 把接收者和消息括起来,而直到运行时才会把消息与方法实现绑定。...接收消息对象(也就是self指向内容) 方法选择器(_cmd指向内容) 之所以说它们隐藏是因为在源代码方法定义并没有声明这两个参数。...如果此方法返回 nil 或 self,则会进入消息转发机制(forwardInvocation:);否则将返回对象重新发送消息。 转发 当动态方法解析不作处理返回NO时,消息转发机制会被触发。

1.7K60

iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

示例:0x12345678对象发送meaning并且没有参数。 选择器:表示消息或方法名称一种特殊方式,表示为类型SEL。...消息转发一种功能强大技术,可以大大增加Objective-C表现力。什么消息转发?简而言之,它允许未知消息被困住并作出反应。...你可能知道self作为一个隐式参数传递,它最终成为一个明确参数。鲜为人知隐式参数_cmd(它保存了正在发送消息选择器第二个这样隐式参数。...如果此方法返回nil 或者self,则会进入消息转发机制(- (void)forwardInvocation:(NSInvocation *)invocation),否则将会返回对象重新发送消息...4.2 消息机制总结 ? Objective-C 给一个对象发送消息会经过以下几个步骤: 在对象 dispatch table 尝试找到该消息

1.7K11

Objective-C对象模型和runtime机制「建议收藏」

对象结构记载了类全部信息。 类对象isa指向元类对象(meta class),类对象方法列表实例方法(-, instance methods)。...元类对象方法列表类方法(+, class methods) 能够这么理解: 类包含类对象和元类对象,它们通过类对象结构定义,构成类全部信息。...Objective-C强调消息传递而非方法调用。 能够一个对象传递消息,且不须要再编译期声明这些消息处理方法。 这些方法在执行时才确定。执行时(runtime)详细功能将在以下介绍。...//待发送消息返回结构体 objc_msgSend_fpret //返回浮点数 objc_msgSendSuper //给超类发消息 SEL 表示方法选择器,结构例如以下: typedef...指向“类对象指针) runtime系统一个用C语言编写动态链接库,核心消息分发。

22920

iOS面试现场,笔试提高题详解

委托让代理方执操作,实际上在委托类这个id类型指针指向对象发送消息,这个id类型指针指向对象,就是代理对象。 代理内存管理 使代理如果声明对,会造成循环引问题。...代理与其他iOS消息传递对 通知:在iOS由通知中进消息接收和消息播,种对多消息传递式。 代理:种通设计模式,iOS对代理持很好,由代理对象、委托者、协议三部分组成。...代只是定义了个法列表,在遵守协议对象objc_protocol_list添加个节点,在运时遵守协议对象发送消息即可 题二:Objective C多重继承实现机制。 什么多继承?...oc“多继承” 其实Objective-C不支持多继承,由于消息机制名字查找发在运时非编译时,很难解决多个基类可能导致义性问题。...,顺着这个思路,代码如下: [1240] 然后,OC有个语法糖可以写: [1240] 题四:简述@selector作用 Selector/SEL又叫方法选择器,SEL在objc.h这样声明,而“

77320

iOS RunTime之四:消息转发

消息发送消息转发流程可以概括为: 消息发送 Runtime 通过 selector 快速查找 IMP 过程,有了函数指针就可以执行对应方法实现; 消息转发在查找 IMP 失败后执行一系列转发流程慢速通道...其实在 forwardInvocation: 消息发送前,Runtime 系统会对象发送 methodSignatureForSelector: 消息,并取到返回方法签名用于生成 NSInvocation...该方法所提供将不同对象链接到消息能力。 注意: forwardInvocation: 方法只有在消息接收对象无法正常响应消息时才会被调用。...指向内容) 方法选择器(_cmd 指向内容) 之所以说它们隐藏是因为在源代码方法定义并没有声明这两个参数。...接下来,我们要通过一个小例子来简单、通俗理解一下什么消息转发以及如何消息转发,希望看完这篇文章时大家会彻底明白OC消息。 上一篇消息发送,我们知道Objective-C语言动态语言。

70631

【IOS开发高级系列】Objective-c Runtime专题总结

简单说:     1、当我们发送一个消息给一个NSObject对象实例时,这条消息会在对象方法列表里查找;     2、当我们发送一个消息给一个类时,这条消息会在类Meta Class方法列表...3 消息         OC中发送消息括号([ ])把接收者和消息括起来,而直到运行时才会把消息与方法实现绑定。...forwardInvocation: 方法就像一个不能识别的消息分发中心,将这些消息转发给不同接收对象。或者它也可以象一个运输站将所有的消息发送给同一个接收对象。...该方法所提供将不同对象链接到消息能力。         注意: forwardInvocation: 方法只有在消息接收对象无法正常响应消息时才会被调用。...■  关联策略表明了相关对象是通过赋值,保留引用还是复制方式进行关联;还有这种关联原子还是非原子。这里关联策略和声明属性时很类似。

30130

神奇Runtime

这个对象特定方法;否则,消息要么被转发,或是临时receiver动态添加这个selector对应实现内容,要么就干脆崩溃掉。...如果有方法签名返回,runtime则根据方法签名创建描述该消息NSInvocation(NSInvocation 实际上就是对一个消息描述,包括selector 以及参数等信息),当前对象发送forwardInvocation...:消息,以创建NSInvocation对象作为参数; 若methodSignatureForSelector:无方法签名返回,则当前对象发送doesNotRecognizeSelector:消息,程序抛出异常退出...当然前提要通过遵循 KVO 属性设置方式来变更属性值,如果仅是直接修改属性对应成员变量,无法实现 KVO 。 同时派生类还重写了 class 方法以“欺骗”外部调用者它就是起初那个类。...,其实是一个对象发送消息,查找消息唯一依据selector名字。

56720

Objective-C Runtime 详解

如果消息接收者能够找到对应方法,那么就相当于直接执行了接收者这个对象特定方法;否则,消息要么被转发,或是临时接收者动态添加这个方法对应实现内容,要么就干脆就crash掉。...消息 前面做了这么多铺垫,现在终于说到了消息了。Objc 中发送消息括号 [] 把接收者和消息括起来,而直到运行时才会把消息与方法实现绑定。...接收消息对象(也就是self指向内容) 方法选择器(_cmd指向内容) 之所以说它们隐藏是因为在源代码方法定义并没有声明这两个参数。...forwardInvocation: 方法就像一个不能识别的消息分发中心,将这些消息转发给不同接收对象。或者它也可以象一个运输站将所有的消息发送给同一个接收对象。...该方法所提供将不同对象链接到消息能力。 注意: forwardInvocation: 方法只有在消息接收对象无法正常响应消息时才会被调用。

1.1K20

Objective-C 点符号一定是恶魔

本文Objective-C 代码气味系列文章一篇。* ......是的,这是夸张说法。在有点符号项目中,我确实能与点符号共存。但我不会自己写。...以下我避免在代码中使用点符号三个原因: 1、点符号混淆了对象和结构体 告诉我,下面的代码做什么用?...但不管用哪种方式,都是传递消息!为什么还要添加第二种消息传递语法呢?...问题在于,在前一种情况下,我们 qux 方法发送信息。而在后一种情况下,我们直接给 qux 实例变量赋值。这是两种截然不同情况!...对于标量,这可能无关紧要,但对于对象,尤其在编写正确内存管理时,这就大不相同了。 现在看看如果不使用点符号号会怎样: [self setQux:10]; 没有歧义。这显然一条消息

7010
领券