在iOS中调用一个方法,其实是调用一个方法实现的函数指针并传给他对象实例指针,一个Selector,还有函数用到的参数。在Objective-C 中,每一个方法调用其实都是转换成了调用objc_msgSend方法。
objc_msgSend的调用过程如下:
0)首先检查消息接受对象是否为nil. 如果消息接受对象为nil,则触发nil-handler. 默认nil-handler是什么都不做的。
1)在垃圾回收环境中(Mac OS X)中,检查是否调用了(retain, release, autorelease, retainCount), 如果是,就返回self. 所以,这就意味着在垃圾回收机制中,retainCount 返回self。这时调用retainCount就会产生无限循环。
2)检查class的缓存中是否有该方法的实现,如果有,调用。
3)在类方法中是否有该方法,如果有就调用类方法的实现。
4)查看父类中是否有该方法实现,如果没有再查找父类的父类中有没有实现。如果找到了,调用。
5)调用resolveInstanceMethod:(或者resolveClassMethod:). 如果返回YES, 则调用。 该对象会有该方法的实现,因为它会调用class_addMethod.
6) 调用forwardingTargetForSelector:. 如果返回non-nil, 则对返回对象发消息。此处不会返回self,否则会进入无限循环。
7)调用methodSignatureForSelector:, 如果返回non-nil, 创建一个NSInvocation 并且将这个NSInvocation传递给forwardInvocation:.
8) 调用doesNotRecognizeSelector:. 默认实现就是抛一个异常。
更详细的可见
http://www.cnblogs.com/biosli/p/NSObject_inherit_2.html
分享到:
相关推荐
以下将详细介绍这8种消息传递方式,并结合实际应用进行解析。 1. **Delegation(代理)** iOS中最常见的通信方式之一,通过定义协议(Protocol)来指定代理对象需要实现的方法。例如,在UITableView中,我们可以...
3. 使用`setCompletionBlockWithSuccess:`或`setCompletionBlockWithFailure:`方法,同时传递解析XML或JSON的Block。 4. 发起请求,库会在后台自动处理响应数据,并调用你设定的Block返回解析结果。 这样的设计使得...
Objective-C的消息传递基于运行时系统,当对象接收到一个消息时,它首先检查自己是否实现了该方法。如果没有,那么会尝试寻找其所属类的父类是否实现。如果整个继承链都没有找到对应的方法,此时就会触发消息转发...
附带的资源中,"Objective-C编程之道IOS设计模式解析.url"可能是指向该主题的其他相关资料,"一步一步学习 iOS 6 编程(第四版).url"可能提供了关于iOS早期版本的编程教程,而"iPhone开发视频教程 iOS开发Objective-C...
标题中的“unity打开ios相册读取图片传到unity解析”意味着我们需要实现以下步骤: 1. **授权访问iOS相册**:在iOS 13及以上版本,用户必须在运行时授予应用程序访问照片库的权限。我们需要在Objective-C或Swift的...
在iOS开发中,Jason是一种流行的轻量级JSON解析库,它允许开发者快速、高效地将JSON数据转换为Swift对象。本文将深入探讨Jason库在iOS应用中的使用,以及其核心特性、优势和如何集成到项目中。 JSON(JavaScript ...
在iOS应用中,XML数据通常用来传递网络请求的响应,如RSS feed、API数据等。 iOS提供了两种主要的XML解析方式: 1. **NSXMLParser**:这是Apple提供的一个基于事件驱动的XML解析器。它会逐个解析XML文档的节点,并...
这个过程包括了方法解析、动态方法解析、方法缓存、消息转发等步骤。 1. **方法解析(Method Resolution)**: 在编译期间,Objective-C会尝试对方法进行解析,如果方法不存在,编译器会抛出错误。在运行时,可以...
在iOS平台上,处理H264流和本地解析是一项关键任务,特别是在开发视频播放、直播应用或者进行视频处理时。H264是一种高效的视频编码标准,被广泛应用于网络视频传输,因为它能提供高质量的视频同时保持较低的数据...
这样可以将消息传递给其他对象,而不是直接崩溃。 - **方法签名(Method Signatures)**:如果上述两个步骤都失败,系统会询问对象它的方法签名,即`- (NSMethodSignature *)methodSignatureForSelector:(SEL)...
iOS推送消息过程中,无论是客户端、服务端还是Provider和APNS,它们之间的通信都必须通过证书来实现安全认证。 - CSR文件:开发者使用CSR(Certificate Signing Request)文件来生成证书签名请求。CSR文件包含了...
本资料“Object_C编程之道iOS设计模式解析”聚焦于利用Object-C来理解和实现iOS中的设计模式,这对于提升代码质量和可维护性至关重要。 设计模式是软件工程中经过实践验证的解决常见问题的最佳方案,它们是经验的...
在iOS开发中,通知消息(Notification)是一种常用的技术,用于在应用程序的不同组件之间传递信息,或者在应用程序处于后台甚至未运行状态时提醒用户有新的事件发生。本篇将详细讲解如何在iOS应用中实现简单的通知...
Objective-C是Apple的主力开发语言,特别是在iOS开发领域,它以其强大的面向对象特性,灵活的消息传递机制,以及与Cocoa Touch框架的紧密结合,为开发者提供了丰富的工具和接口。在本书中,你将学习到: 1. **...
Objective C支持这些概念,并提供了相应的语言特性,如类、消息传递等。 5. iOS设计模式解析:书中可能深入探讨了iOS开发中常见的设计模式,例如单例模式、观察者模式、工厂模式、策略模式等,并且展示如何将这些...
通过调用上述解析方法,获取XML文件中的新闻数据,并将其传递给对应的组件进行渲染。 总的来说,解析XML文件是iOS小程序获取网络数据的一种常见方法。通过选择合适的解析器或库,结合小程序的组件化特性,我们可以...
Objective-C是苹果公司为其操作系统macOS和iOS开发的主要编程语言,它是C语言的超集,引入了面向对象的特性,并且具有Smalltalk风格的消息传递机制。本书“Objective-C编程之道:iOS设计模式解析”深入探讨了如何在...
本文将深入探讨iOS中的JSON解析,并通过一个实际的示例演示如何将JSON字符串转换为数据字典。 首先,理解JSON的基本结构至关重要。JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。数据以键值对(key...
与静态类型语言不同,Objective-C在编译期间并不确定所有的方法调用,而是在程序运行时解析消息传递。Runtime提供了许多API,可以让我们在运行时查询类、对象、协议等信息,甚至改变它们的行为。 2. **IMP...
通过阅读“IOS设计模式解析电子书+源代码”,开发者可以更好地理解和运用这些设计模式,提高代码质量和开发效率。实际的源码实现部分对于加深理解、实践应用以及解决实际问题有着极大的帮助。在iOS开发过程中,熟练...