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

我不明白为什么Objective-C委托函数会工作,为什么Swift委托函数会崩溃。你能给我解释一下吗?

Objective-C和Swift是两种不同的编程语言,它们在委托函数的处理上有一些差异。

在Objective-C中,委托函数的工作原理是通过消息传递机制实现的。当一个对象需要执行某个任务时,它会将任务委托给另一个对象来完成。委托对象需要实现特定的协议,并将自己注册为委托对象。当任务完成时,委托对象会收到一个消息,然后执行相应的方法来处理任务结果。这种机制可以实现对象之间的松耦合,提高代码的可维护性和可扩展性。

而在Swift中,委托函数的处理方式有所不同。Swift引入了可选类型(Optional)的概念,用于处理可能为空的值。当一个对象需要执行某个任务时,它会将任务委托给另一个对象来完成,委托对象需要实现特定的协议。但是在Swift中,委托对象的方法默认是可选的,即可以选择实现或者不实现。当委托对象没有实现某个方法时,Swift会将该方法视为空,不会触发崩溃。这种机制可以提高代码的灵活性和容错性。

所以,如果在Swift中使用委托函数时发生崩溃,可能是因为委托对象没有实现相应的方法,或者没有正确地注册委托对象。需要检查委托对象的实现和注册过程,确保委托方法被正确调用。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,满足各类业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:提供稳定可靠的云数据库服务,支持高可用、备份恢复等功能。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能机器学习平台(AI Lab):提供丰富的人工智能算法和模型训练平台,帮助开发者快速构建智能应用。详情请参考:https://cloud.tencent.com/product/ailab
  • 物联网通信平台(IoT Hub):提供稳定可靠的物联网设备连接和数据传输服务,支持海量设备接入。详情请参考:https://cloud.tencent.com/product/iothub
  • 移动推送服务(TPNS):提供高效可靠的移动消息推送服务,帮助开发者实现消息推送功能。详情请参考:https://cloud.tencent.com/product/tpns
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【面试必备】Swift 面试题及其答案

使用不当增加运行时崩溃的可能性。在某些情况下,崩溃可能是有意的行为,但有更好的方法来达到相同的结果,例如,通过使用 fatalError( ) 函数。...很难说 Swift 是一个成熟的函数式语言,但是它已经具备了函数式语言的基础。 问题2- 下面的功能特性都包含在 Swift?...能解释一下为什么不同? 答案: static 修饰的属性或者修饰的函数都不可以重写。但是使用 class 修饰符,可以重写属性或者函数。...---- 通过 extension (扩展)保存一个属性?请解释一下原因。 答案:不能。扩展可以给当前的类型添加新的行为,但是不能改变本身的类型或者本身的接口。...高级 问题1- 能解释一下用泛型来声明枚举的问题 ---- 在 Swift 中,解释一下用泛型来声明枚举的问题

6K30

解决 iOS 15 上 APP 莫名其妙地退出登录

即使能够重现这个问题,也100%确定的手机在点击应用图标的时候是解锁的,所以我不明白为什么会出现这个Keychain错误。...这就是为什么读取失败,以及最终为什么一些用户会发现自己被登出了。...在这里学到了重要的一课,即不应该假设受保护的数据在AppDelegate初始化时是可用的,但说实话,还是不高兴,因为不明白为什么它不可用。...现在,实际上从未想过有这么大的延迟,实际上是@_saagarjha建议检查时间戳,之后,他指给我看这条推特。 Twitter:Apple开发人员文档的首页 推特翻译:有趣的iOS 15优化。...结论 从iOS 15开始,系统可能决定在用户实际尝试打开的应用程序之前对其进行 "预热",这可能增加受保护的数据在你认为应该无法使用的时候的被访问概率。

85610

译文: 低调奢华有内涵的「Runtime」

所以,有问题,暂时也解答不了。 而至于为什么现在看这个几乎用不着的Runtime?主要是受刺激了。 正文: 期待看到的是最近更新的Xcode 8 和Swift3.0?...Swift3.0不是要干死Objective-C了吗? 此言差矣。Swift虽是天天上头条,但是并不意味着已经完全把曾经和我们朝夕相处的老相好干翻了。为什么非得要互怼,就不能一起愉快滴玩耍?...事实上,苹果还特别声明: 「当你用Objective-C编程的时候,并不需要用到Runtime库」 这就很容易理解为什么有人这样说:在不了解Objective-C Runtime下去使用它,将会是危险的...(导致程序异常或者崩溃)。...这个runtime系统就好比如是Objective-C的操作系统,(runtime系统)让这门语言工作起来。」

95140

iOS蓝牙开发如何更好地收发数据

当然,会有不同的第三方框架,最近做的项目用的就是第三方框架BabyBluetooth。 本文部分代码,有两种版本,应用苹果框架CoreBluetooth时,用的是Swift。...用BabyBluetooth时,用的是Objective-C。 我们从哪里拿到数据?...其中第7~8步的代码(Swift版)如下: // 第7、8步: // 发现特征的回调(委托)方法(假设在这之前已经「成功连接」、「发现服务」) func peripheral(peripheral...在逗我么?说好的二进制数据呢?不应该全部是0、1么?为什么会有d啊、a啊、f啊,罩杯么?...要继续坚持用二进制?「阿尔法狗」倒应该是很乐意的。 正因为二进制与十六进制之间的转换比较简单,所以在计算机领域,16进制比较通用。

2.7K32

解决 iOS 15 上 APP 莫名其妙地退出登录 解决 iOS 15 上 APP 莫名其妙地退出登录

即使能够重现这个问题,也100%确定的手机在点击应用图标的时候是解锁的,所以我不明白为什么会出现这个Keychain错误。...这就是为什么读取失败,以及最终为什么一些用户会发现自己被登出了。...在这里学到了重要的一课,即不应该假设受保护的数据在AppDelegate初始化时是可用的,但说实话,还是不高兴,因为不明白为什么它不可用。...现在,实际上从未想过有这么大的延迟,实际上是@_saagarjha建议检查时间戳,之后,他指给我看这条推特。...结论 从iOS 15开始,系统可能决定在用户实际尝试打开的应用程序之前对其进行 "预热",这可能增加受保护的数据在你认为应该无法使用的时候的被访问概率。

1.5K20

写在开发iOS应用之后

在科技产品需求方面, 微软家的东西,除了手机, 已经满足了工作、娱乐的需求, 因此完全没有理由去买一个mac电脑使用,因为不需要它, 所以我也不可能iOS开发。...而swift又不敢用,毕竟网上的iOS开发资料大多都还是基于objective-c的,作为一个iOS开发新手,非常依赖于这些资料,它对的作用大于一切,甚至大于良好的代码体验,别无选择。...所以,要开始做完全陌生的iOS开发,也没有令我感到严重的不适,多用搜索引擎,挺挺就过去了, 以前不也是这么过来的。“行业内有这么多做iOS开发的,他们学的自然也学的这样安慰自己。...甚至与到了现在,完成了工作任务, 对于iOS开发和objective-c语言还是一知半解,大量代码都是重网上拷贝过来的,并不了解其中的含义。 在以前, 都会寻根问题, 探究个究竟。...可以轻松随意的给 windows、linux、android等主流系统开发程序,为什么到了那就有这么多规矩? 牛逼是的事情, 老子玩不起还躲不起

87990

自学Swift之路(零)前言

当然网上也有人这么说的:大家不要担心,Swift也没啥用,就能保证干iOS一直干下去,只会OC再干几年啊,这几年后,还想一直做码农?...就算你的技术老大深刻明白Swift和OC的关系,那我觉得他肯定认为两种语言都会的人更优秀,更受公司待见。其次,第二位老兄说的,几年后还要做码农?...还有人说不学Swift,OC是世界上最优雅的语言...好吧,(有点想笑)承认OC确实是很优雅的,但Swift有没有搞头这个不是和你能说了算的,创始人不在不一定就说这门语言没搞头了,看人Java...不就发展得好好的...其次,为什么大家都对Swift持抵触态度呢?...OS X没有经验),那么两者肯定有很多地方是相似的,咱们这些OC的学起Swift来难度应该会大大降低的,那么,我们如果想要学习新的语言,为什么不先学Swift呢?...

1.2K130

在Uber亲历的最严重的工程灾难

于是,这个由设计、产品和架构组成的核心团队在一个房间里工作了几个月,使用新的函数式和反应式模式、新的编程语言开发新的应用程序,一切都进行得很顺利。 这个架构高度依赖了 Swift 的高级语言特性。...的一些 Twitter 旧同事建议离开这家追踪用户位置的“坏”公司。受到“惊吓”的人们关闭了手机的位置权限,但新 App 并没有相应的解决办法。 我们赶紧想办法讨论对策。...我们开始反编译目标文件,并逐行检查,看看为什么 Swift 代码生成的文件体积这么大。我们删除了一些没有被使用的特性,并把 watchOS 应用重新改回了 Objective-C。...关于编译器的 pass,需要解释一下。 现代编译器会对代码进行大量的 pass,例如 pass 内联函数,或者用值来替换常量表达式。根据执行顺序的不同,可能会得到更小体积的机器码。...无论做什么,都要明白为什么要这么做,不要让它演变成各派固执己见的政治斗争。 设立好故障点。如果意识到自己犯了一个错误,要弄清楚如何做出权衡,并给自己一条出路。

63220

六个方向关于iOS100个面试题,都会了吗?

不定时分享一些iOS面试资料和学习资料教程等干货给大家! 常见问题 昨天/这周学习了什么? 为什么热衷于软件开发? 对哪一种控制系统比较熟悉? 是否参与过GitHub项目?...请解释一下NSUserDefaults。就而言,如何在磁盘中对数组对象进行序列化? 如何储存用户的认证信息? 请问何为Keychain服务? 为什么移动设备上的缓存和压缩是不可或缺的?...请解释一下~/Documents,~/Library和~/tmp。 iOS中的~属于什么目录? AirPlay是如何运行的?换做是如何通过编程提高应用的实用性以及演示效果?...为什么Cocoa Touch的类名称是以两个大写字母开头的? SwiftObjective-C分别是什么?两者相比有何不同之处,又有何联系? 为什么Optional在Swift语言中非常重要?...在Swift中,什么时候该用let,什么时候该用var? 为什么map函数必不可少?该在什么情况下使用它? 会选择什么工具来追踪Bug? 如果在Cocoa中发现一个Bug,如何处理?

3.6K50

2019最新iOS面试题及答案

始终有一个高人在背后准确地帮你收拾垃圾,不用考虑它什么时候开始工作,怎样工作。...只需要明白,申请了一段内存空间,当我不再使用从而这段内存成为垃圾的时候,就彻底的把它忘记掉,反正那个高人帮我收拾垃圾。...看下面的程序,第一个NSLog输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什么?...其实关于正式协议,类别和非正式协议很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些可能希望实现的方法,可以使用他们更好的完成工作”。...一个参数既可以是const还可以是volatile? 一个指针可以是volatile ?解释为什么。 答:1).是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。

2.3K20

窥探Swift之协议(Protocol)和委托代理(Delegate)回调的使用

说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者...的工作方式来直观的感受一下协议的使用场景,以及Delegate代理的工作方式。...上面使用的委托回调主要是使用Swift中的协议(Protocol)来实现的。那么如何使用协议来实现自己的委托回调呢?这将是下面将要介绍的内容。   二....上面实例的意思就是把下一个页面的值通过委托代理回调的形式传到上个页面中去,在前面的博客《窥探Swift函数与闭包的应用实例》中也做了同样的事情,不过之前我们是使用闭包(Closure)回调来实现的。...接下来我们就定义协议,然后再协议的基础上实现委托代理回调。接下来了开始扩充的部分。

3.3K80

100个iOS开发设计程序员面试题汇总,将如何作答?

一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备。 常见问题 ·昨天/这周学习了什么?...·请解释一下NSUserDefaults。就而言,如何在磁盘中对数组对象进行序列化? ·如何储存用户的认证信息? ·请问何为Keychain服务?...·为什么CocoaTouch的类名称是以两个大写字母开头的? ·SwiftObjective-C分别是什么?两者相比有何不同之处,又有何联系? ·为什么Optional在Swift语言中非常重要?...·请解释一下NSError。在Swift中,什么情况下能使用NSError,什么情况下不能? ·请说明如何使用Instancetype及其重要性。...·在Swift中,什么时候该用let,什么时候该用var? ·为什么map函数必不可少?该在什么情况下使用它? ·会选择什么工具来追踪Bug? ·如果在Cocoa中发现一个Bug,如何处理?

1.4K40

iOS程序员面试,绝对遇到这些问题!

解释一下NSUserDefaults。就而言,如何在磁盘中对数组对象进行序列化? 如何储存用户的认证信息? 请问何为Keychain服务? 为什么移动设备上的缓存和压缩是不可或缺的?...请解释一下~/Documents,~/Library和~/tmp。 iOS中的~属于什么目录? AirPlay是如何运行的?换做是如何通过编程提高应用的实用性以及演示效果?...为什么Cocoa Touch的类名称是以两个大写字母开头的? SwiftObjective-C分别是什么?两者相比有何不同之处,又有何联系? 为什么Optional在Swift语言中非常重要?...请解释一下NSError。在Swift中,什么情况下能使用NSError ,什么情况下不能? 请说明如何使用Instancetype及其重要性。...在Swift中,什么时候该用let,什么时候该用var? 为什么map函数必不可少?该在什么情况下使用它? 会选择什么工具来追踪Bug? 如果在Cocoa中发现一个Bug,如何处理?

1.4K20

100个iOS开发面试题汇总

一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备。常见问题: 1.昨天/这周学习了什么?...29 请解释一下NSUserDefaults。就而言,如何在磁盘中对数组对象进行序列化? 30 如何储存用户的认证信息? 31 请问何为Keychain服务?...38 为什么Cocoa Touch的类名称是以两个大写字母开头的? 39 SwiftObjective-C分别是什么?两者相比有何不同之处,又有何联系?...40 为什么Optional在Swift语言中非常重要? 41 请解释一下NSError。在Swift中,什么情况下能使用NSError ,什么情况下不能?...43 在Swift中,什么时候该用let,什么时候该用var? 44 为什么map函数必不可少?该在什么情况下使用它? 45 会选择什么工具来追踪Bug?

1.2K30

iOS 开发面试通关指南:67 个必知问题!

问题 一条简短的提示:是不会提供这些问题的完整答案的(只有一些个人预期至少应该了解的基础),因为认为,如果自己去寻找答案,应该准备得更好。...如果现在想得到第一份工作,开源项目是一种证明技术的好方法。如果是某个广受欢迎repo的维护者,那就更好了。 3.以前所在的团队有多大?有过在任何一个项目中担任leader的经历?...但还记得哪个是默认选项? 20.(如果求职者Objective-C):SwiftObjective-C有什么区别?分别喜欢这两种语言的什么特性?...想我们虽然很少有机会(有需求)去做这件事,但是也许有一天需要去做。 50.(如果求职者懂Objective-C):copy和retain之间有什么区别?...对新工作有什么期待?坦诚地说就可以。所追求的大概率是更高的薪水,但除此之外,一定还有其他东西吧! 以上只是面试官可能提的一些问题。 结论 最好始终跟上iOS世界的变化,那对来说是很有利的。

1.1K20

记一次艰难的GC问题排查!

再看了下这个gc收集情况,每次也完全收集。在日志中很明显在root scanning的时间比较长,当时对这个阶段不太熟悉(后面会继续讲),所以一直也不明白为什么这样,在网上各种搜索,也没有结论。...好了最后来盘一盘到底为什么会出现gc慢的问题呢?我们这个定时任务是一个定时查询微信退款信息的,微信的退款信息需要解析XML,就有如下代码: ?...举个栗子说吧,AClassLoader->BClassLoader->CClassLoader,表示AClassLoader在加载类的时候委托BClassLoader类加载器来加载,BClassLoader...加载类的时候委托CClassLoader来加载,假如我们使用AClassLoader来加载X这个类,而X这个类最终是被CClassLoader来加载的,那么我们称CClassLoader为X类的定义类加载器...如果大家觉得这篇文章对有帮助,的关注和转发是对最大的支持,O(∩_∩)O:

1K81
领券