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