【问题标题】:what is the difference between NSObject and UIViewControllerNSObject 和 UIViewController 有什么区别
【发布时间】:2011-06-29 04:56:49
【问题描述】:

我是 iphone 开发新手,我正在学习教程和一些示例。

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

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

【问题讨论】:

  • 你能举一些让你困惑的例子吗?他们之间有着天壤之别。 UIViewController 实际上是 NSObject 的子类,首先。

标签: iphone objective-c xcode


【解决方案1】:

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

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

在 Objective-C 中,所有对象都基于NSObject。暂时只看表面价值。如果你想使用一个对象,它将基于 NSObject。因此,除非您使用的是 intfloat,否则您可能会使用基于 NSObject 的东西。

NSObject 本身并没有真正提供任何功能。它是对象的“起点”或“空白石板”。

您可以构建一个用于表示动物的对象定义,如下所示:

@interface Animal : NSObject { }

@property (assign) int age;

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

@end

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

您会注意到,在该示例中,我们的 Object 定义基于 NSObject。

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

@interface Human : Animal { }

- (void)lie;

@end

在此示例中,我们为名为“人类”的对象类型创建了一个新定义。我们只定义了一件事:一种方法,它使我们的类能够撒谎——除了我们还将获得交配的能力,因为我们基于“动物”,而“动物”已经描述了如何交配。

回答您的问题:

UIViewController 包含一组逻辑,用于执行一些非常复杂的任务。大多数逻辑是 Cocoa Touch 框架的一部分。

如果你正在制作一个“动物”类,你不需要知道如何响应来自屏幕的用户输入,你不需要知道如何管理 UIView,你不需要跟踪 parentViewControllers 等。因此,基于 UIViewController 的 Animal 类将是愚蠢的。这是不使用 UIViewController 的时候。

现在,如果您在 iPhone 上制作了一个用户界面屏幕,并且您希望在用户单击按钮时执行一些例程 - 那么您确实需要 UIViewController 的所有内容,因此您需要对其进行子类化。

我可以理解为什么,如果您不是来自面向对象的编程背景,您可能会对此感到困惑。似乎您需要创建的大多数东西都是 UIViewController 子类。但是,当您探索 OOP 的世界时,您会发现对象不仅是其他人编写的您可以使用的东西,而且它们是您想要从头开始创建的东西,以完成您过去在程序上做的事情.

祝您在激动人心的旅程中好运。

我强烈建议您前往当地的 Barnes and Noble 或前往 Amazon.com 并获取一些有关该主题的书籍 - 如果您有一个已经了解 OOP 的朋友,那么好的导师比学习自己。

别忘了,在 iPhone 上,您还必须处理内存管理。这对很多人来说是一个症结所在——如果你不遵守规则,就会引起很多麻烦。早点学习它们,你会得到很好的服务。

希望有所帮助, 干杯。

来源:

【讨论】:

  • 非常感谢,这对我有帮助,让我理解了这些事情......请给我推荐一个不错的链接,在那里我可以找到 PDF 格式的免费在线书籍,我可以下载并阅读关于目标 c 的内容还有更多从头开始请......
  • 好吧; developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 是 Apple 关于 Objective-C 的 PDF。这是非常彻底的。一个有趣的 OOP 概述链接:codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx(使用 C#,但概念相同,减去内存管理)当然,google:google.com/…
  • @Steve...我有来自苹果的关于 Objective-c 的 pdf 文件,你已经在上面发送了...除了你发送的文件之外,我还想从头开始提供一些与 Objective-c 相关的 pdf 文件...一些电子书...
【解决方案2】:

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

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

我为我维护的每个视图使用UIViewController。我几乎从不直接将对象用作NSObject,尽管我经常继承NSObject,也从不继承UIViewController。但这只是我。

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

【讨论】:

  • 谢谢你..ya NSObject 是根类。我们将如何决定使用哪个类?
  • @Abhilash:取决于你想做什么。如果您想使用特定于UIViewController 的方法,例如view 属性,请使用它。如果您只想要NSObject 固有的方法,那么就使用它。我几乎从不直接使用NSObject,尽管我经常将其子类化。
【解决方案3】:

NSObject 表示它只继承 ObjectProperties。它没有视图。但是 UIViewcontroller 拥有视图本身。它也可以控制视图。

当你不想要视图时,你可以使用 NSObject。如果你需要 viewcontroller 或视图,那么你可以使用 UIViewController。

【讨论】:

    【解决方案4】:

    NSObject 是 obj_c 中的超类,UIViewcontroller 是 NSObject 的子类。UIViewcontroller 继承自 UIResponder 的属性,而这个类继承自 NSObject 类...

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      相关资源
      最近更新 更多