从Interface Builder设置UIImageView的图像时,该图像是如何加载的?

kas*_*rak 11 cocoa-touch interface-builder uiimageview nsbundle ios

当从属性检查器预先设置图像视图的源时,何时/如何解析文件的实际路径?似乎没有任何对NSBundle的调用,但我可能错了.

编辑:我正在尝试调用任何调用的方法(如果可能的话)以便以后动态替换资产.

在此输入图像描述

Pet*_*nev 9

没有UIImage调用初始化程序或工厂.
我用调试器(在iOS模拟器7.0.3上)做了一些研究,发现如下:
1)UIImageView在IB中设置的是初始化的-initWithCoder:.
2)在initWithCoder:方法decodeObjectForKey:中调用.并且(!)键UIImage包含来自IB的图像.此图像UIImageView通过ivar 设置,而不是通过setImage:setter.
因此,似乎IB在编译时将原始图像数据打包到XIB/Storyboard中.胡说八道,但确实如此.
这就是为什么我们不能调配+imageNamed:或其他工厂,并应使用条件代码为retina4和iOS6设置图像

编辑:

注释显示已编译的IB文件的hexdumping具有png名称.

实际上,查看"hexdump -C BYZ-38-t0r-view-8bC-Xf-vdC.nib"的输出表示PNG的文件名出现在编译文件中.因此,它必须通过同一捆绑包中的文件名加载文件数据.

但是,它们仍然通过一些内部机制加载,而不是通过 imageNamed: