NSObject和UIViewController有什么区别

Abh*_*ash 5 iphone xcode objective-c

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

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

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

Ste*_*eve 13

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

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

在Objective-C中,所有对象都基于NSObject.现在就把它当作面值.如果你想使用一个Object,它将基于NSObject.所以,除非你使用的是inta或a ,否则你float可能会使用基于的东西NSObject.

NSObject在它自身中,并不真正提供任何功能.这是对象的"起始位置"或"空白平板".

您可以构建一个用于表示Animal的Object定义,如下所示:

@interface Animal : NSObject { }

@property (assign) int age;

- (Animal*)mateWith:(Animal*)lover;

@end
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们描述了一个基本的动物.这堂课基本上做了两件事; 知道动物的年龄,并且可以与另一种动物交配以产生动物后代.

您将在该示例中注意到我们在NSObject上基于Object定义.

现在,假设我们要为人类创建一个定义; 好吧,人类是,并且将永远是所有动物的子集.因此,我们可以重用Animal类定义中的所有逻辑来创建一个Human定义 - 我们可能这样做:

@interface Human : Animal { }

- (void)lie;

@end
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我们为一种名为"Human"的Object创建了一个新定义.我们只定义了一件事:一种让我们班级能够撒谎的方法 - 除了我们还能够交配,因为我们基于"动物",而"动物"已经描述了如何交配.

回答你的问题:

UIViewController包含一个逻辑BUNCH,用于执行一些非常复杂的任务.大部分逻辑都是Cocoa Touch框架的一部分.

如果你正在制作一个"动物"课程,你不需要知道如何从屏幕上回复用户输入,你不需要知道如何管理UIView,你不需要跟踪parentViewControllers等等.因此,将我们的Animal类放在UIViewController上会很愚蠢.这是不使用UIViewController的时候.

现在,如果你在iPhone上创建一个用户界面屏幕,并且你想在用户点击一个按钮时执行一些例程 - 那么你需要所有UIViewController的东西,所以你要将它子类化.

我可以理解为什么,如果你不是来自面向对象的编程背景,你可能会对此感到困惑.看起来您需要创建的大部分内容都是ARE UIViewController子类.然而,当你探索OOP的世界时,你会发现不仅是对象是别人写的你可以使用的东西 - 但它们是你想要从头开始创建的东西,以完成你曾经在程序上做的事情. .

祝你在激动人心的旅途中好运.

我强烈建议你去当地的Barnes and Noble旅行,或者去亚马逊网站找一些关于这个主题的书籍 - 如果你有一个已经知道OOP的朋友,一个好的导师比学习自己快得多.

不要忘记,在iPhone上,你还必须处理内存管理.对于很多人来说这是一个难点 - 如果你不遵守规则,会引起很多麻烦.尽早了解它们,您将得到很好的服务.

希望有所帮助,干杯.

资料来源:


Pen*_*One 6

UIViewControllerUIResponder其本身的子类,NSObject其子类是根类(即不是任何东西的子类)。

这意味着NSObject可以调用for 的任何方法UIViewController,但反之则不然。如果您查看UIViewController Class Reference,它具有您可以使用此类的所有属性和方法。此外,您会自动获得 an 的所有方法NSObject(在NSObject Class Reference 中列出)。

UIViewController对我维护的每个视图都使用 a 。我几乎从不直接使用对象作为NSObject,尽管我经常子类化NSObject并且从不子类化UIViewController。但这只是我。

我建议您查看 Apple 的View Controller Programming Guide,了解使用UIViewController优惠的好处。