Cocoa touch initWithNibName和initWithCoder方法是UIView还是UIViewController?

Cocoa touch initWithNibName和initWithCoder方法是UIView还是UIViewController?,cocoa-touch,Cocoa Touch,似乎我在这两方面都看到了他们。这很有趣,因为他们不是从彼此继承的。他们也有一些共同的祖先,但谁拥有initWithCoder和IniWithNibName呢 那么是什么原因呢 此外,在UIViewController参考类initWithCoder中根本没有提到 -(id)initWithCoder:(NSCoder *)aDecoder { //NSString * superClass =NSStringFromClass([self superclass]) ; self

似乎我在这两方面都看到了他们。这很有趣,因为他们不是从彼此继承的。他们也有一些共同的祖先,但谁拥有initWithCoder和IniWithNibName呢

那么是什么原因呢

此外,在UIViewController参考类initWithCoder中根本没有提到

-(id)initWithCoder:(NSCoder *)aDecoder
{
    //NSString * superClass =NSStringFromClass([self superclass]) ;
    self = [self initWithNibName:nil bundle:nil];
    if (self) {
    }
    return self;
}

initWithCoder、initWithNibName都意味着您可以使用.xib文件创建视图。

像这样的问题应该从参考文档中的搜索开始

initWithNibName:bundle:
UIViewController
的方法,没有其他类(扩展
UIViewController
的类除外)


initWithCoder:
是在
NSCoding
协议中声明的方法。任何符合
NSCoding
协议的类(还有很多类)都将有一个
initWithCoder:
方法。
UIView
UIViewController
都实现了
NSCoding
协议,这意味着这两个类都有
initWithCoder:

UITextField和UILabel彼此不继承,但它们都有
text
属性。它是UILabel属性还是UITextField属性?它们都继承自UIView。UIView从什么时候开始有了
text
属性?
initWithCoder:
意味着比能够使用xib多得多。这是正确的答案。我查了一下参考资料。initWithCoder似乎不是UIViewController的成员。现在我知道它是UIViewController和UIView都拥有的协议的成员。你认为这是个糟糕的问题吗?人们通常会认为initWithCoder与xib有关,因为当UIView或UIViewController出现在xib中时会调用它们。结果表明,它们与NSCoding有关,而与XIB基本无关。“我认为这对很多人来说都是有用的。”塞皮提亚古我从来没有说过这是一个糟糕的问题。你为什么这么说?如果你的评论是关于你的问题的否决票,那么你应该发表你对这个问题的评论,而不是我的答案。不,我没有否决你的问题。
initWithCoder
NSCoding
协议)允许对象、视图控制器(在本例中)随意序列化和反序列化。为什么系统要序列化/反序列化视图控制器?我想到的一件事是:记忆。若应用程序正在使用大量对象,且堆上升,系统可能会决定清除应用程序中目前未使用的某些视图控制器,并在用户导航回这些视图控制器时重新创建它们(当然,通过调用
initWithCoder
)。