NSObject和UIViewController有什么区别

时间:2011-06-29 04:56:49

标签: iphone objective-c xcode

我是iphone开发的新手,我正在阅读教程和一些示例。

我想知道NSObject和UIViewController类之间有什么区别,以及我们将如何知道应该使用哪个类。

一些是用NSObject编写的,一些是在UIViewController中。

4 个答案:

答案 0 :(得分:13)

来自维基百科,面向对象编程的基本概述:

  

面向对象编程(OOP)是一种   使用“对象”编程范例 -   由数据组成的数据结构   领域和方法连同他们的   交互 - 设计应用程序   和计算机程序。 [...]面向对象的程序通常包含不同类型的对象,每种类型对应于要管理的特定类型的复杂数据,或者可能对应于现实世界的对象或概念,例如银行帐户,曲棍球播放器,或推土机。

在Objective-C中,所有对象都基于NSObject。现在就把它当作面值。如果你想使用一个Object,它将基于NSObject。因此,除非您使用intfloat,否则您可能会使用基于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)

UIViewControllerUIResponder的子类,它本身是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类......