IOS/xcode: 默认执行哪些方法
IOS/xcode: what methods are getting executed by default
我是 IOS 新手,具有 PHP 等过程脚本语言的背景。在尝试学习 Xcode 几个月后,我意识到我仍然不了解一些非常基础的东西,即什么时候调用什么方法。
我可以理解在 IBActions 中响应用户操作而调用的方法。然而,调用其他方法的过程仍然是个谜。我在视图控制器的子类中收集了 ViewDidLoad 等的生命周期,其中这些方法都被自动调用。 app delegate 中似乎有一些方法会自动调用。但是,除此之外,可以肯定地说,我放入 NSObject 或视图控制器中的任何方法 不会被调用 除非由事件触发或从生命周期方法调用?
似乎不可能像在函数和方法之外的过程文件中那样将代码放入文件中并知道它将被执行。相反,您必须将它放在一个方法中。但是如何调用该方法?
是否所有代码最终都必须 link 返回到生命周期方法或事件触发的方法?
如果您在 NSobject 中怎么办?如何确保代码被触发——或者您是否必须在生命周期方法中的 NSviewcontroller 中包含 NSobject 方法?
感谢您解释这个基本概念。
很高兴知道现在有来自其他环境的人正在研究 iOS 开发。首先,请注意,您所有的问题都与 面向对象编程的基本概念 相关,因此如果您选择进入 Java 土地你会遇到完全相同的问题。
让我提几点:
您指出您注意到某些方法是自动调用的,例如 AppDelegate
中的 applicationDidFinishLaunching
或 UIViewController
中的 viewDidLoad
。这确实是正确的,但是这些情况是由您的开发环境和您使用的框架给定和决定的。所以,确实在 iOS 上,你的应用程序的基本构建块是 UIViewControllers
,这些是 Apple 自己为我们提供的 classes iOS 开发在他们的环境中工作。 Apple 决定并提供建议,说明我们如何处理这些问题。如果您打算 Android,则不会特别处理 UIViewControllers
,但是该平台也会为您提供基本构建块,指导您进行应用程序开发。
如果你想体验raw面向对象编程,你总是可以从写一些Objective-Cclasses开始并在终端中编译和 运行 它们,您(很可能)将无法像这样构建 iOS 应用程序,但您将能够解决计算问题并构建应用程序。
你提到的另一点与如果你只是一个 NSObject
并且你希望代码被执行有关。好吧,在这种情况下它很特别,因为 NSObject
本身实际上只是您要使用的所有其他 class 的 base class在 iOS 上。它实现了基本操作(比如放入 NSArray
中),一旦您将其子 class ,您将需要这些操作。你几乎永远不会想直接使用 NSObject
,但总是使用子class。
我不能在这个答案中进一步探讨面向对象编程,我相信那会超出 Whosebug 的范围。只要知道你必须研究的是面向对象编程的基础知识。一旦您熟悉了这些,Xcode 和 iOS 中的所有内容就会开始变得更有意义!
有大量的材料教授这些原则,我向您推荐Stanford lectures on iOS 8 development,其中大量介绍了这些原则!
祝你好运! :)
Cocoa,支持 OS X 和 iOS 开发的框架集是 事件驱动的 。这意味着,一般来说,代码是作为某些事件的结果执行的——用户触摸、计时器触发、动画完成、接收到网络请求等。从程序员的角度来看,代码的执行顺序并不明显,而是对发生的事情做出反应。
您提到 UIViewController
生命周期挂钩是通过重写 viewDidLoad
和朋友之类的方法来获取某些代码 运行ning 的一种方式。请注意,这些方法是由于某些事件而被调用的——它在名称中!调用 viewDidLoad
是为了让您有机会在 视图加载后执行一些自定义操作。
稍后,您会发现有无穷无尽的复杂方法可以将代码获取到 运行,具体取决于您的需要 – 您可以将块提交到 Grand Central Dispatch (GCD) queue, spin up an NSOperation
for more complex, interdependent tasks, schedule a future event with an NSTimer
,等等。但是,同样,由于系统的事件驱动特性,理论上您可以将所有这些代码的执行追溯到某个事件。
我是 IOS 新手,具有 PHP 等过程脚本语言的背景。在尝试学习 Xcode 几个月后,我意识到我仍然不了解一些非常基础的东西,即什么时候调用什么方法。
我可以理解在 IBActions 中响应用户操作而调用的方法。然而,调用其他方法的过程仍然是个谜。我在视图控制器的子类中收集了 ViewDidLoad 等的生命周期,其中这些方法都被自动调用。 app delegate 中似乎有一些方法会自动调用。但是,除此之外,可以肯定地说,我放入 NSObject 或视图控制器中的任何方法 不会被调用 除非由事件触发或从生命周期方法调用?
似乎不可能像在函数和方法之外的过程文件中那样将代码放入文件中并知道它将被执行。相反,您必须将它放在一个方法中。但是如何调用该方法?
是否所有代码最终都必须 link 返回到生命周期方法或事件触发的方法?
如果您在 NSobject 中怎么办?如何确保代码被触发——或者您是否必须在生命周期方法中的 NSviewcontroller 中包含 NSobject 方法?
感谢您解释这个基本概念。
很高兴知道现在有来自其他环境的人正在研究 iOS 开发。首先,请注意,您所有的问题都与 面向对象编程的基本概念 相关,因此如果您选择进入 Java 土地你会遇到完全相同的问题。
让我提几点:
您指出您注意到某些方法是自动调用的,例如
AppDelegate
中的applicationDidFinishLaunching
或UIViewController
中的viewDidLoad
。这确实是正确的,但是这些情况是由您的开发环境和您使用的框架给定和决定的。所以,确实在 iOS 上,你的应用程序的基本构建块是UIViewControllers
,这些是 Apple 自己为我们提供的 classes iOS 开发在他们的环境中工作。 Apple 决定并提供建议,说明我们如何处理这些问题。如果您打算 Android,则不会特别处理UIViewControllers
,但是该平台也会为您提供基本构建块,指导您进行应用程序开发。如果你想体验raw面向对象编程,你总是可以从写一些Objective-Cclasses开始并在终端中编译和 运行 它们,您(很可能)将无法像这样构建 iOS 应用程序,但您将能够解决计算问题并构建应用程序。
你提到的另一点与如果你只是一个
NSObject
并且你希望代码被执行有关。好吧,在这种情况下它很特别,因为NSObject
本身实际上只是您要使用的所有其他 class 的 base class在 iOS 上。它实现了基本操作(比如放入NSArray
中),一旦您将其子 class ,您将需要这些操作。你几乎永远不会想直接使用NSObject
,但总是使用子class。
我不能在这个答案中进一步探讨面向对象编程,我相信那会超出 Whosebug 的范围。只要知道你必须研究的是面向对象编程的基础知识。一旦您熟悉了这些,Xcode 和 iOS 中的所有内容就会开始变得更有意义!
有大量的材料教授这些原则,我向您推荐Stanford lectures on iOS 8 development,其中大量介绍了这些原则!
祝你好运! :)
Cocoa,支持 OS X 和 iOS 开发的框架集是 事件驱动的 。这意味着,一般来说,代码是作为某些事件的结果执行的——用户触摸、计时器触发、动画完成、接收到网络请求等。从程序员的角度来看,代码的执行顺序并不明显,而是对发生的事情做出反应。
您提到 UIViewController
生命周期挂钩是通过重写 viewDidLoad
和朋友之类的方法来获取某些代码 运行ning 的一种方式。请注意,这些方法是由于某些事件而被调用的——它在名称中!调用 viewDidLoad
是为了让您有机会在 视图加载后执行一些自定义操作。
稍后,您会发现有无穷无尽的复杂方法可以将代码获取到 运行,具体取决于您的需要 – 您可以将块提交到 Grand Central Dispatch (GCD) queue, spin up an NSOperation
for more complex, interdependent tasks, schedule a future event with an NSTimer
,等等。但是,同样,由于系统的事件驱动特性,理论上您可以将所有这些代码的执行追溯到某个事件。