我是iphone开发的新手,我正在阅读教程和一些示例。
我想知道NSObject和UIViewController类之间有什么区别,以及我们将如何知道应该使用哪个类。
一些是用NSObject编写的,一些是在UIViewController中。
答案 0 :(得分:13)
来自维基百科,面向对象编程的基本概述:
面向对象编程(OOP)是一种 使用“对象”编程范例 - 由数据组成的数据结构 领域和方法连同他们的 交互 - 设计应用程序 和计算机程序。 [...]面向对象的程序通常包含不同类型的对象,每种类型对应于要管理的特定类型的复杂数据,或者可能对应于现实世界的对象或概念,例如银行帐户,曲棍球播放器,或推土机。
在Objective-C中,所有对象都基于NSObject
。现在就把它当作面值。如果你想使用一个Object,它将基于NSObject。因此,除非您使用int
或float
,否则您可能会使用基于NSObject
的内容。
NSObject
in-and-of-self,并不真正提供任何功能。这是对象的“起始位置”或“空白平板”。
您可以构建一个用于表示Animal的Object定义,如下所示:
@interface Animal : NSObject { }
@property (assign) int age;
- (Animal*)mateWith:(Animal*)lover;
@end
在这个例子中,我们描述了一个基本的动物。这堂课基本上做了两件事;知道动物的年龄,并且可以与另一种动物交配以产生动物后代。
在这个例子中你会注意到我们在NSObject上建立了对象定义。
现在,我们要为人类创建一个定义;好吧,人类是,并且将永远是所有动物的子集。因此,我们可以重用Animal类定义中的所有逻辑来创建一个Human定义 - 我们可能这样做:
@interface Human : Animal { }
- (void)lie;
@end
在这个例子中,我们为一种名为“Human”的Object创建了一个新定义。我们只定义了一件事:一种让我们班级能够撒谎的方法 - 除了我们还能够交配,因为我们基于“动物”,而“动物”已经描述了如何交配。
提出您的问题:
UIViewController包含一个逻辑BUNCH,用于执行一些非常复杂的任务。大部分逻辑都是Cocoa Touch框架的一部分。
如果您正在制作“动物”课程,您不需要知道如何从屏幕上响应用户输入,您不需要知道如何管理UIView,您不需要跟踪parentViewControllers等等。因此,基于UIViewController的Animal类将是愚蠢的。这是不使用UIViewController的时候。
现在,如果你在iPhone上创建一个用户界面屏幕,并且你想在用户点击一个按钮时执行一些例程 - 那么你需要所有UIViewController的东西,所以你要继承它。
我可以理解为什么,如果你不是来自面向对象的编程背景,你可能会对此感到困惑。看起来您需要创建的大部分内容都是ARE UIViewController子类。然而,当你探索OOP的世界时,你会发现不仅是对象是别人写的你可以使用的东西 - 但它们是你想要从头开始创建的东西,以完成你曾经在程序上做的事情。 。
祝你在激动人心的旅途中好运。
我强烈建议你去当地的Barnes and Noble旅行,或者去亚马逊网站找一些关于这个主题的书籍 - 如果你有一个已经知道OOP的朋友,一个好的导师会比学习自己。
不要忘记,在iPhone上,你还必须处理内存管理。对于很多人来说这是一个难点 - 如果你不遵守规则,会引起很多麻烦。尽早了解它们,您将得到很好的服务。
希望有所帮助, 干杯。
来源:
答案 1 :(得分:3)
UIViewController
是UIResponder
的子类,它本身是NSObject
的子类,它是一个根类(即不是任何子类)。
这意味着可以在NSObject
上调用UIViewController
的任何方法,但不能相反。如果查看UIViewController Class Reference,如果您使用此类,它将具有您可以使用的所有属性和方法。此外,您自动获取NSObject
的所有方法(在NSObject Class Reference中列出)。
我为我维护的每个视图使用UIViewController
。我几乎从不直接将对象用作NSObject
,尽管我经常将NSObject
子类化,而我从不继承UIViewController
。但这只是我。
我建议您查看Apple的View Controller Programming Guide,了解使用UIViewController
优惠的好处。
答案 2 :(得分:3)
NSObject意味着它只继承ObjectProperties。它没有view.But UIViewcontroller自带视图。它也可以控制视图。
当你不想要一个视图时,你可以使用NSObject。如果你需要viewcontroller或view,那么你可以使用UIViewController。
答案 3 :(得分:2)
NSObject是obj_c中的超类,UIViewcontroller是NSObject的子类.UIViewcontroller从UIResponder继承属性,该类继承自NSObject类......