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

【Objective-C】Objective-C语言的动态性

Objective-C语言的动态性主要体现在以下3个方面   (1)动态类型:运行时确定对象的类型。   (2)动态绑定:运行时确定对象的方法。   ...一、动态类型   动态类型指对象指针类型的动态性,具体地说就是使用id类型将对象的类型推迟到运行时才确定,由赋给它的对象类型决定该对象类型(说起来怎么这么绕口),也就是说id修饰的对象是动态类型对象,其他在编译期指明类型的为静态类型对象...NSString的方法,那么虽然编译通过了,但运行时会出现崩溃, 二、动态绑定   动态绑定是建立在动态类型的基础之上,在OC的消息分发机制下将要执行的方法推迟到运行时才确定,可以动态的添加方法。...三、动态加载   动态加载分为两部分:动态资源的加载(如:图片资源),代码模块的加载;这些都是在运行时根据需要有选择性的添加到程序中的,是一种代码和资源的“懒加载”模式,这样降低编译时期对内存的开销,提供程序的性能...在消息传递机制中,当开发者编写[receiver message:xxx]语句进行发送消息后,编译器都会将其转换成objc_msgSend C语言的发送格式。

1.8K20

【iOS】我的Objective-C学习笔记

,是个对象方法,-开头 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值 重写构造方法的注意点: 1.先调用父类的构造方法([super init]) 2.再进行子类内部成员变量的初始化...3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用 4.方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类 6.Category...-description方法默认返回的是“类名+内存地址” 8.SEL SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。...例子:李明杰/iOS开发进阶视频教程/23-再次重构.mp4/00:10:30 12.protocol 协议 1.协议的定义 @protocol 协议名称 // 方法声明列表...在类A中把一个成员变量_age声明为protected,则: 在A的方法中: 当然可以直接访问_age 在B中的方法: 可以访问A的实例对象a中的_age,也可以访问B的_age 14.缩进 在XCODE

15630
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS——Objective-C 对象的结构分析

    第二次打印是class对象的内存分布,并且 0x00000001000080c0(isa) & 0x0000000ffffffff8ULL,得到的内存地址为 0x00000001000080c0,po打印的结果是名为...对比第一次第二次的打印,两个分别为0x00000001000080e8和0x00000001000080c0的内存地址,打印的出来的class对象的名称是一样的。...使用MachOView打开代码的可执行文件(exec)。 找到符号表,并且滚动到黄褐色的部分。...发现,00000001000080E8, 00000001000080C0的内存地址不就是上面提到要研究的么,再根据value这一列的值,就可以得知,0x00000001000080e8是类对象, 0x00000001000080c0...1. runtime部分API介绍。 导入 #import object_getClass: 传一个对象,返回这个对象的类对象。

    49330

    Objective-C爬虫:实现动态网页内容的抓取

    然而,很多有价值的信息都隐藏在动态加载的网页中,这些网页通过JavaScript动态生成内容,传统的爬虫技术往往难以应对。...本文将介绍如何使用Objective-C开发一个爬虫程序,实现对这类动态网页内容的抓取。1. 理解动态网页的工作原理动态网页通常使用JavaScript、CSS和HTML等技术动态生成内容。...因此,我们需要使用能够执行JavaScript的爬虫技术,如Selenium或使用WebKit引擎的Objective-C爬虫。2....选择合适的爬虫框架在Objective-C中,有几个流行的爬虫框架可以用于动态网页内容的抓取,在Objective-C环境中,为了高效地抓取动态网页内容,我们可以选择以下两种流行的爬虫框架:CocoaHTTPEngine...:这是一个基于Objective-C的HTTP客户端库,它支持HTTP/HTTPS协议,并能够处理JavaScript渲染的网页。

    16110

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

    而我的最爱,就是下面要讲到的Objective-C Runtime——对于大部分开发者而言,还是有些神秘。...另外一个人提到了Objective-C的Runtime可能可以解决问题,然后过半的开发者认同答案。 大部分苹果开发者大概听过Runtime——他们知道Runtime的存在——但绝大部分人没有去用过。...上面这个陈述,表明Objective-C是动态干活儿的,也就是说Objective-C是一门动态语言,与之相反,就是Swift、C++、Java等等这类语言。是什么因素决定了一门语言是静态的还是动态?...而像Objective-C这类动态语言,就有点不一样了。所有的决定都是在Objecitve-C的Runtime库创造的。正因为有了这个库,我们可以自己操纵方法的调度和类型的绑定。...在节假日期间,我们通常每周会提交多个节日版本,很明显耐心等待人家修复这个问题并不是一种很好的选择。

    97940

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

    在 WWDC2020 中 Objective-C 运行时的改进这个视频提到关于类的的数据结构的一些变化,本文是对这个视频提到的部分变化进行翻译。...视频中介绍了三个变化: 首先是数据结构的变化, Objective-C 运行时会使用它们来追踪类。 其次是 Objective-C 方法列表的变化。...“ro”代表只读,它包括像类名词,方法,协议,和实例变量的信息。Swift 类和 Objective-C 类共享这一数据结构,所以每个 Swift 类也有这些数据结构。...macOS 可以选择唤出 dirty memory,但因为 iOS 不使用 swap,所以 dirty memory 在iOS中的代价很大。...只有 Swift 类会使用 demangled name 字段,并且 Swift 类并不需要这一字段,除非有东西访问它们的 Objective-C 名称时才需要。

    50220

    iOS 面试策略之语言工具-Xcode使用

    iOS 开发的官方 IDE 是 Xcode,它也是 Apple 平台最主流的开发工具。...目前 Xcode 已经更新到第 9 个版本,功能也是涵盖开发、测试、性能分析、文档查询、源代码管理等多个方面,可谓是 App 开发一站式的平台。...[1240] Xcode 诞生于 2003 年,发展至今,已经可以支持除 Objective-C 和 Swift 之外其他 6 种语言:C、C++与 Objective-C 密不可分;自动化方面则多用...关键词:#调试 #启动优化 App 启动时间过长,可能有多个原因造成。理论上 App 的启动时间是由 main() 函数之前的加载时间(t1)和 main() 函数之后的加载时间(t2)。...所以优化的手段也有了,简单来说就是: 减少动态库数量,dylib loading time 会下降,苹果的推荐是动态库不要多于 6 个 减少 Objective-C 的类数量,例如合并或者删除,这样可以加快动态链接

    1.7K20

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

    动态的Objective-C——关于消息机制与运行时的探讨 一、引言     Objective-C是一种很优美的语言,至少在我使用其进行编程的过程中,是很享受他那近乎自然语言的函数命名、灵活多样的方法调用方式以及配合...因此在Objective-C中对象的真正行为往往是在运行时确定而非在编译时确定,所以Objective-C又被称为是一种运行时的动态语言。    ...本篇博客既不介绍iOS开发,也不提及MacOS开发,只对Objective-C语言的这种消息机制与运行时动态进行探讨,所提及的内容也都是我开发中的个人积累与经验,如果偏颇之处,欢迎讨论指正。...实际上,Objective-C中的每一句方法调用最后都会转换成一条消息进行发送。一条消息包含3部分内容:方法选择器、接收消息的对象以及参数。objc_msgSend函数就是用来发送这种消息。...四、是时候来重温下Runtime了     所谓运行时是针对于编译时而言的,本篇文章的开头,我们就说过Objective-C是一种极动态的运行时语言。

    83240

    自学iOS开发,从新手小白到高级工程师正确的打开方式

    自己目前大四汪一枚,自学iOS开发一年左右,先后学习了swift和Objective-C。由于是自学(而且全院貌似就我一个人在学),深知自学之痛。所以在此分享一下我的学习路程,希望可以帮到大家。...个人以为,从iOS开发小白到iOS开发高级工程师,可以分成以下四个阶段: 1.熟悉语言语法阶段(小白) iOS开发主要有两种语言:Objective-C和swift。...建议先学Objective-C,因为目前国内80%~90%的公司都在用Objective,因为产品迭代原因,最近一两年还不会大量迁移到swift。...在这个阶段的人,基本都会写一个或者多个开源类库,上传github进行维护。同时在项目开发中承担一些核心工作,使用C对一些底层进行封装。而不是写一些界面布局,数据获取处理等操作。...本人学习swift看的是《Swift Programming Language》,学习Objective-C看的是《Objective-C编程全解》。

    1.8K80

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

    1.1 方法与消息发送 消息在OC中方法调用是一个消息发送的过程。OC方法最终被生成为C函数,并带有一些额外的参数。这个C函数objc_msgSend就负责消息发送。...消息转发是一种功能强大的技术,可以大大增加Objective-C的表现力。什么是消息转发?简而言之,它允许未知的消息被困住并作出反应。...但在异常抛出前,Objective-C 的运行时会给你三次拯救程序的机会: Method resolution Fast forwarding Normal forwarding 2.1 动态方法解析:...3.2 苹果系统API迭代造成API不兼容的奔溃处理 3.2.1 兼容系统API迭代的传统方案 随着每年iOS系统与硬件的更新迭代,部分性能更优异或者可读性更高的API将有可能对原有API进行废弃与更替...Objective-C 中给一个对象发送消息会经过以下几个步骤: 在对象类的 dispatch table 中尝试找到该消息。

    2.1K11

    AsyncDisplayKit 2.0 教程:入门「译」

    在这两部分 AsyncDisplayKit 2.0 教程中,你将掌握使用ASDK构建一个实用的和动态的应用程序的所有要素。在第一部分中,你将要学习一些在你构建应用程序时可以用到的宏观思想。...在第二部分中,你将学习如何构建自己 node 的 subclass,以及如何使用ASDK强大的布局引擎。为了更好的完成本教程,你需要会使用 Xcode 以及 熟悉 Objective-C。...免责声明:ASDK不兼容 Interface Builder和AutoLayout,因此,您将不会在本教程中使用它们,虽然ASDK完全支持Swift(除了ComponentKit),许多开发者仍在使用 Objective-C...出于这些原因,本系列将重点介绍 Objective-C。话虽这么说,我们已经包括了一个Swift版本的实例项目。(嘴上说没有,代码还是很诚实的~) 开始 首先,下载初始项目。...假设你有一个pageViewController,里面每个 viewController 都带有一个 collectionView。现在,你就需要考虑如何在两个方向上动态加载内容。

    2.2K20

    iOS_Effective Objective-C 20 编写高质量iOS与OS X代码的52个有效方法

    三读Objective-C2.0 笔记~(作为一个OC开发者,必读之书) gitbook地址 一、熟悉Objective-C 1、了解Objective-C语言的起源 ​ Objective-C在C...Objective-C是C的“超集”(superset),所以C语言中的所有功能在编写Objective-C代码时依然适用。因此必须同时掌握C与OC这两门语言的核心概念,方能写出高效的OC代码来。...要点: OC为C语言添加了面向对象特性,是其超集。OC使用动态绑定的消息结构。...bug 11、理解objc_msgSend的作用 可以看这篇: iOS_Objective-C 消息发送(消息查找 及 消息转发)过程中的 一二、OC中的消息和消息查找 ​ 上面文章讲述的自描述了部分消息的调用过程...12、理解消息转发机制 ​ 可以看这篇: iOS_Objective-C 消息发送(消息查找 及 消息转发)过程中的三、消息转发 要点: 若对象无法响应某个选择子,则进入消息转发流程 通过运行期的动态方法解析功能

    1.1K40

    ·第三方网络图片处理框架:SDWebImage(官方文档翻译篇)

    如何使用 ---- Objective-C: #import ......常见问题 ---- 9.1 UITableViewCell与使用动态图像的大小尺寸 UITableView根据单元格的第一个图像集,确定图像的大小尺寸。...它完全无视HTTP服务器返回的各种缓存控制头,并缓存返回的图像且不受时间限制。这意味着您的图像URL是指向永远不会改变的图像的静态网址。如果指向的图像发生变化,则网址的某些部分应当相应更改。...安装 ---- 在您的项目中使用SDWebImage有三种方法: 使用CocoaPods 使用Carthage 通过将项目复制到您的存储库中 10.1 使用CocoaPods安装 CocoaPods是Objective-C...Podfile示例: pod 'SDWebImage/WebP' 10.2 使用Carthage安装(iOS 8+) Carthage是Swift和Objective-C的轻量级依赖管理员。

    3.7K20

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

    协议与委托代理回调在之前的博客中也是经常提到和用到的在《Objective-C中的委托(代理)模式》和《iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流...说到协议,在Objective-C中也是有协议的,并且Swift中的协议和Objc中的协议使用起来也是大同小异的,在Java等现代面向对象编程语言中有接口(Interface)的概念,其实和Swift中或者...一.从UITableView中来窥探协议的委托代理回调     UITableView这个高级控件在iOS开发中的出镜率是比较高的,今天的重点不是介绍如何使用UITableView, 而是让通过UITableView...如果你对UITableView控件不熟的话,完全可以跳过这一部分,直接进入第二部分。如果你要更好的理解Delegate委托回调,还是很有必要看这一部分的。     ...上面的场景在iOS开发中极为常见,使用场景也是比较广泛的。所以协议无论在Swift还是在iOS开发中都是极为重要的概念之一。

    3.6K80

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

    代理与其他iOS中消息传递的式的对 通知:在iOS中由通知中进消息接收和消息播,是种对多的消息传递式。 代理:是种通的设计模式,iOS中对代理持的很好,由代理对象、委托者、协议三部分组成。...例如UIKit的UITableView中有很多代理如果都换成block实现,会比delegates难好多。...代只是定义了个法列表,在遵守协议对象的objc_protocol_list中添加个节点,在运时向遵守协议的对象发送消息即可 题二:Objective C中多重继承的实现机制。 什么是多继承?...oc中的“多继承” 其实Objective-C不支持多继承,由于消息机制名字查找发在运时非编译时,很难解决多个基类可能导致的义性问题。...[1240] 题三:简述Singleton的概念及并使用Objective C 写出相关代码。 Singleton: 单例模式。

    81720
    领券