• Geek_97bcf5
    2019-04-03
    元类和类的数据结构是同一个,只是运行时使用的字段不一样。

    实例方法调用是通过objc_msgSend来调用,它的第一个入参就是实例对象,其流程是查找实例对象的isa指针,找到类对象,然后找到method_t的IMP,bl直接跳转调用。

    类方法的调用和实例方法调用一致,它的第一个入参对象是类对象,类对象的isa指向的是元类。

    所以,没有元类的话,类方法是没有办法调用的。objc_msgSend的调用流程是一定要isa指针的。

    如果实例方法和类方法都放在类对象上,那类对象的isa指针只能指向自己了,那一旦类方法和实例方法重名,就没法搞了!

    所以,问这个问题的,都是objc_msgSend源码没看过的同学。
    展开
     8
     54
  • 元元
    2019-04-02
    老师ios为什么要设计元类?能讲一下吗

    作者回复: 其实这个问题是个开放性的问题。
    不同阶段的解读也会不一样。因为这个知识点大家都会去学,主要是希望能够通过面试者的回答,加上追问方式来看他是不是会带着思考去学习。比如元类和类的结构体非常类似,他有没有想过为什么不合在一起用一个结构体?(结构体设计能力)元类和类创建的时机是不是一样的,为什么?(用过 runtime 接口开发没)元类的 flag 字段里记录了什么?(是否有深入探究的意识)

     1
     26
  • leoliu
    2019-04-04
    本地的同一图片的2倍和3倍图被转换成相应的webp后,这样苹果就无法根据设备选择了相应的图片了,对瘦身的影响哪个比重会大一下
     1
     4
  • codertiany
    2019-04-02
    我也不懂啥叫元类
     1
     4
  • mαnajay
    2019-04-02
    我觉得设计元类 ,主要思想是 处理代码 通用逻辑与 特有逻辑。有些作为模板可以复用代码逻辑甚至节省内存空间分配,有些则是要针对独立个体单独处理,就是常说的面向对象编程中处处皆对象
    
     3
  • 小前端
    2019-04-02
    课后作业的官方答案啥时候同步?谢谢
     1
     3
  • Mit
    2019-08-26
    重复图片与无用图片的检索工具
    https://github.com/mitchell-dream/MitImgChecker 可以尝试一下这个工具。
    
     2
  • Geek_e1c05c
    2019-05-09
    您好,苹果不是禁止使用动态库的吗?把静态库换成动态库能上架成功吗?抱歉不是很懂
    
     2
  • drunkenMouse
    2019-04-07
    App Thinning原理:每个App包会包含多个芯片(如真机、模拟器)的指令集架构文件,App Thinning会使用户只下载一个适合自己设备的芯片指令架构文件。

    简单说,使用App Thinning之后苹果会自动帮你把App包按照型号分割成不同变体,保证每个型号只下载自己所需要的资源。而自己所需要做的,就是通过Asset Catalog模板创建xcassets目录,将2x与3x图片放进去。

    无用文件删除简单说:通过find命令与正则表达式找到所有代码中在使用的文件, 那么剩下的就是没有用的文件。关于没用文件的删除和有用文件的寻找,可以借助工具LSUnusedResources

    objc_msgSend通过_objc_selrefs获取selector, __objc_classrefs获取被调用的类,__objc_supperrefs获取调用的父类

    若有部分方法是运行时动态调用就会没执行到则没法收集。比如A类的B方法没有被我直接调用,但是在运行到某一代码块时,我通过runtime的objc_msgSend手动调用了这个方法,则不会被记录。

    元类:每个类都是元类,通过元类调用类方法。通过元类创建实例对象,用实例对象来调用实例方法。可以防止类方法与实例方法重名时,声明和调用失败。而实例对象的isa指针指向的是元类,也就是之前说的:每个对象都会指向一个类,每个类都有一个方法列表,方法列表里的每个方法都是由SEL、IMP和metadata组成。元类的isa指针,指向父类的元类,而根类就是NSObject。

    所以,为什么要设计元类?为了区分实例方法和类方法的声明与调用。但是方法列表保存在元类里,通过元类来找到父类。

    最后问句:有人作业可以借我参考一下吗??
    展开
    
     2
  • leoliu
    2019-04-04
    本地的@2x和@3x转成webp以后,调用的时候是否要判断设备分辨率,根据不同的设备分辨率调用不同倍数的webp
    
     2
  • Norman
    2019-04-03
    老师好,有个问题。我使用imageOptim压缩图片之前的xcassets大小是8.7M,压缩之后是6.4M,但是打包出来的ipa大小并没有明显改变,请问这是为什么呢。
    
     2
  • 李乾坤David
    2019-07-30
    看了之后并没有给出具体找到无用类的方法?
    
     1
  • lcp
    2019-07-19
    运行时检查类,请问调用 isInitialized() 方法的时机是什么时候呢?
    我理解只能通过hook msgSend的时候,判断方法是否为 +initialize 比 运行时通过isInitialized() 方案要来得简单一些。
    
     1
  • 鹏sir
    2019-04-18
    老师,使用webp压缩图片后项目的包体积大概能减少多少呢??我们项目的图片最多也就100kb出头的样子,好多都是几kb,而且使用webp压缩后的图片,加载图片方式也需要改变,代码改动量比较大。。。
    
     1
  • 开发小能手
    2019-04-13
    请教老师,我在评论中看到老师有提到“元类的flag中记录了什么?”这里的 “flag” 是指isa是一个共用体中每段 “位域” 的含义么?还是指其它的概念?

    作者回复: 元类结构体中的 flag 字段

     1
     1
  • 一纸丶荒年
    2019-04-12
    您的这个 工具 对于 swfit 和 xib 不适用.

    作者回复: 哪个工具?

    
     1
  • 卓小土
    2019-04-12
    戴老师为什么没有讲一下,用clang AST分析代码依赖关系,找出无用代码的方法。

    作者回复: clang 插件篇里会说下

    
     1
  • 邓斌
    2019-04-04
    元类的存在让类本身也相当于一个返利对象,也就是类方法存在的原理。毕竟万物皆对象不是白说的。
    一种好的设计思想衍生出好的一种使用方法,元类的思路就很典型
    
     1
  • 易若风云
    2019-04-03
    一切皆对象,类描述了实例,元类描述了类,谁来描述元类呢?感觉都是设计上的哲学
    
     1
  • @许还真
    2020-01-27
    学习了 这种思考方式不是为了考试 而是探究过程。考察思考深度
    
    
我们在线,来聊聊吧