美文网首页iOS基础知识整理iOS Developer
[iOS 知识总结二] 为什么说Objective-C 是一门动

[iOS 知识总结二] 为什么说Objective-C 是一门动

作者: pengxuyuan | 来源:发表于2017-07-04 17:02 被阅读2192次

理解

静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有的东西,在运行时还可以动态的添加变量、方法和类

Objective-C 可以通过Runtime 这个运行时机制,在运行时动态的添加变量、方法、类等,所以说Objective-C 是一门动态的语言

补充

Objective-C 是C 的超集,在C 语言的基础上添加了面向对象特性,并且利用Runtime 这个运行时机制,为Objective-C 增添了动态的特性。

Objective-C 使用的是 “消息结构” 并非 “函数调用”:使用消息结构的的语言,其运行时所应执行的代码由运行期决定;而使用函数调用的语言,则由编译器决定

这里贴下网上的定义:

(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。

(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

因为在运行期可以继续向类中添加方法,所以编译器在编译时还无法确定类中是否有某个方法的实现。对于类无法处理一个消息就会触发消息转发机制

消息转发分为两大阶段:

  1. “动态方法解析”:先征询接收者,所属的类,能否动态添加方法,来处理这个消息,若可以则结束,如不能则继续往下走
  2. “完整的消息转发机制”:
    • 请接收者看看有没其他对象能处理这条消息,若有,就把这个消息转发给那个对象然后结束
    • 运行时系统会把与消息有关细节全部封装到NSInvocation 对象中,再给对象最后一次机会,令其设法解决当前还未处理的这条消息

相关文章

  • iOS 面试各要点 暂记

    ## iOS常用问题总结#### iOS基础知识回顾##### 1、为什么说Objective-C是一门动态的语言...

  • iOS面试总结

    2017年iOS面试总结 1、为什么说Objective-C是一门动态语言? 答:Objective-C类的类型和...

  • [iOS 知识总结二] 为什么说Objective-C 是一门动

    理解 静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有的东西,在运行时还可以动态的添加变量、方法和类 ...

  • runtime

    iOS中C++相关知识 什么是runtime 在了解runtime之前,要知道Objective-C 是一门基于运...

  • iOS面试题

    iOS面试准备 基础 1. 为什么说Objective-C是一门动态的语言? 编译期:即编译器对语言的编译阶段,编...

  • iOS面试题,基础→中级→高级面试进价=总会是你需要的!

    iOS基础面试题部分 1. 为什么说Objective-C是一门动态的语言?2. 讲一下MVC和MVVM,MVP?...

  • 2022年iOS面试题1

    一 iOS初级面试题及答案 1.为什么说Objective-C是一门动态的语言? 1.object-c类的类型和数...

  • iOS内存管理

    如果要说iOS的内存管理问题,先要知道Objective-C是一门什么样的语言 —> Objective-C是一门...

  • Day6

    1:为什么说Objective-C 是一门动态的语言?Objective-C 可以通过Runtime 这个运行时机...

  • IOS面试总结

    基础 为什么说Objective-C是一门动态的语言? 讲一下MVC和MVVM,MVP?一、MVC模式 二、MVP...

网友评论

    本文标题:[iOS 知识总结二] 为什么说Objective-C 是一门动

    本文链接:https://www.haomeiwen.com/subject/jgsxhxtx.html