【问题标题】:IOS/xcode: what methods are getting executed by defaultIOS/xcode:默认执行哪些方法
【发布时间】:2015-04-02 21:52:03
【问题描述】:

我是 IOS 新手,具有 PHP 等过程脚本语言的背景。在尝试学习 Xcode 几个月后,我意识到我仍然不了解一些非常基本的东西,即什么时候调用什么方法。

我可以理解在 IBActions 中响应用户操作而调用的方法。但是,调用其他方法的过程仍然很神秘。我在视图控制器的子类中收集了 ViewDidLoad 等的生命周期,其中这些方法都被自动调用。似乎应用程序委托中有一些方法会自动调用。但是,除此之外,可以肯定地说,我放入 NSObject 或视图控制器的任何方法不会被调用,除非由事件触发或从生命周期方法调用?

似乎不可能像在函数和方法之外的过程文件中那样将代码放入文件中并且知道它将被执行。相反,您必须将其放在方法中。但是如何调用该方法呢?

是否所有代码最终都必须链接回生命周期方法或事件触发的方法?

如果你在一个 NSobject 中,你如何确保代码被触发——或者你是否必须在生命周期方法中包含 NSviewcontroller 中的 NSobject 方法?

感谢您解释这个基本概念。

【问题讨论】:

    标签: ios xcode methods


    【解决方案1】:

    很高兴知道现在有来自其他环境的人正在研究 iOS 开发。首先,请注意,您的所有问题都与面向对象编程的基本概念有关,因此,如果您选择例如进入 Java 领域,您会遇到完全相同的问题。

    让我提几点:

    1. 您指出您注意到某些方法是自动调用的,例如您的AppDelegate 中的applicationDidFinishLaunchingUIViewController 中的viewDidLoad。这确实是正确的,但是这些情况是由您的开发环境和您使用的框架给定和确定的。因此,确实在 iOS 上,您的应用程序的基本构建块是 UIViewControllers,这些是 Apple 自己提供的,供我们 iOS 开发人员在他们的环境中工作。 Apple 确定并提供建议,说明我们如何与这些人合作。如果您打算使用 Android,则不会特别处理 UIViewControllers,但该平台也会为您提供指导您进行应用程序开发的基本构建块。

    2. 如果你想体验原始面向对象编程,你总是可以开始编写一些Objective-C类并在终端中编译和运行它们,你(很可能)将无法构建这样的 iOS 应用程序,但您将能够解决计算问题并构建应用程序。

    3. 您提到的另一点涉及到如果您只是一个NSObject 并且您希望代码被执行。好吧,在这种情况下它很特别,因为NSObject 本身实际上只是您希望在 iOS 上使用的所有其他类的 基类。它实现了子类化后需要的基本操作(例如放入NSArray)。您几乎永远都不想直接使用NSObject,而总是想使用它的子类。

    我无法在这个答案中进一步探讨面向对象的编程,这将超出我相信的 Stackoverflow 的范围。只要知道你必须研究的是面向对象编程的基础知识。一旦你熟悉了这些,Xcode 和 iOS 中的一切都将开始变得更有意义!

    有大量的材料可以教授这些原则,我会向您推荐 Stanford lectures on iOS 8 development,其中详细介绍了这些原则!

    祝你好运! :)

    【讨论】:

    • Ia 正确的是,所有可执行代码都必须封装在一个方法中。为了执行代码,必须由用户事件或视图控制器或应用程序委托的生命周期中的自动方法之一调用该方法?我的实际问题是我有一个子类 NSobject 的模型类,如果我想执行它的方法,我是否必须通过用户操作或应用程序委托或视图控制器生命周期方法调用它们?
    • 确实如此!不知何故,你必须遵守这些规则。用户操作或系统组件的生命周期方法是触发方法的方法,但也可以通过例如触发事件。网络连接或操作系统事件,具体取决于您想要做什么。但最常见的情况确实是系统构建块的用户操作和生命周期方法。
    【解决方案2】:

    Cocoa 是一套支持 OS X 和 iOS 开发的框架,是事件驱动的。这意味着,一般来说,代码是作为某个事件的结果执行的——用户触摸、计时器触发、动画完成、接收到网络请求等。从程序员的角度来看,代码不是按照明显的顺序执行的,而是为了响应正在发生的事情。

    您提到UIViewController 生命周期钩子是通过覆盖viewDidLoad 和朋友等方法来运行您的一些代码的一种方式。请注意,这些方法是由于某些事件而被调用的——它在名称中!调用 viewDidLoad 是为了让您有机会在 视图加载后执行自定义操作。

    稍后,您会发现有无穷无尽的复杂方法可以让代码运行,具体取决于您的需要 - 您可以将块提交到 Grand Central Dispatch (GCD) 队列,启动 NSOperation 以执行更复杂、相互依赖的任务,使用NSTimer 安排未来的活动等等。但是,同样,由于系统的事件驱动性质,理论上您可以将所有这些代码的执行追溯到某个事件。

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多