我创建了一个类'abc',它是UIViewController的子类。在创建它的时候,我点击了自动为它创建一个xib的选项。现在xcode为我创建了3个文件 abc.h 2. abc.m 3. abc.xib。
现在每当我创建一个abc类的对象时 abc * a = [abc alloc];
即使我没有使用initiwithNibName初始化对象并使用它,它也会加载xib文件。那么这个xib文件如何与abc对象相关联。即使我删除了abc.xib,它也会加载该xib文件。我无法理解它在哪里加载xib文件,如果它不在项目空间中。并且存储了xib和控制器的关联?
提前致谢。
答案 0 :(得分:8)
正在发生的是initWithNibName:bundle:
的默认实现在主Bundle中搜索与View Controller类同名的Nib文件。无论您是否选择自动创建Nib的选项,都会发生这种情况。请参阅UIViewController文档(initWithNibName:bundle:
的讨论部分)。
现在initWithNibName:bundle:
方法是UIViewController的默认初始值设定项,这意味着即使你不直接使用它(比如说你使用init
),它也会在引擎盖下被调用。< / p>
最后,即使您从XCode中删除了Nib文件,由于某种原因(不确定原因)它也不会从主程序包中删除(至少在模拟器中)。即使你清洁&amp;建立它留在那里的项目。 我用来完全摆脱Nib文件的解决方案是从模拟器中删除App,然后清理&amp;再次建立。
希望这有帮助!
答案 1 :(得分:1)
xib可能仍在您的编译区域中,因此您需要执行清理以完全摆脱它。 (产品&gt;&gt;清洁)。 UIViewControllers的默认init方法将自动查找同名的xib,这就是为什么它仍在分配该xib。一旦你清理它就会停止。
注意这一部分:如果为nibName参数指定nil,则必须覆盖loadView方法并在那里创建视图,或者必须在bundle中提供一个nib文件,其名称(不带.nib扩展名)与名称匹配您的视图控制器类。 (在后一种情况下,类名将成为存储在nibName属性中的名称。)如果不执行这些操作,则视图控制器将无法加载其视图。