gpt4 book ai didi

objective-c - 创建 iOS 应用程序时,主循环去了哪里?

转载 作者:可可西里 更新时间:2023-11-01 05:46:40 26 4
gpt4 key购买 nike

我正在 Xcode 中为 iPhone 编写一个 iOS 应用程序,我在各自的 .h 和 .m 文件中创建了一些类及其方法(这是两个类,所以基本上我有两对 .h 和 .m文件)

我现在想开始编写我的主循环,它会在用户点击播放按钮时执行,但我具体应该在哪里做呢?

我在 ViewController.m 中这样做吗?例如在这个方法中:

- (IBAction)playPressed:(UIButton *)sender 
{
// main loop executed in here ?
// or simply message to the main loop to start executing is *sent* from here ?
}

我在这里读到一个类似的问题,有人建议使用 AppDelegate。现在是 AppDelegate.m 还是 AppDelegate.h ?如果是这种情况,我是直接开始编写代码,还是将所有内容都包含在类似以下内容中:

int main(int argc, char **argv)
{
....
}

在 Appdelegate 文件中?

我试图在我创建的 game.m 文件中简单地开始实例化类并声明泛型方法(不属于任何特定类......),我得到一个 initializer element is not a compile -时间常量 在我尝试实例化任何东西时立即发出警告

有什么帮助吗?来自 C++,它真的会帮助我一劳永逸地弄清楚在哪个文件中确切地编写我的主循环,以及我是否应该将它包装在某种 int main() 函数中。

谢谢!

附言:

为了以防万一,我的 ViewController 将只包含一个播放按钮,只要按下它就会开始执行我的主循环,还有一个停止按钮会终止主循环的执行

我已经在 ViewController.m 中创建了它们各自的方法:

- (IBAction)playPressed:(UIButton *)sender 
{
//
}

- (IBAction)stopPressed:(UIButton *)sender
{
// ??
}

暂时是空的:)

最佳答案

iOS 上的编程方法与 C++ 方法不同。 实际上,在 C++ 中,您必须进行无限循环并在每一帧进行触摸、绘制所有内容等。 直到玩家按下“退出”并且你打破了循环。 在 iOS 上,情况有所不同: 您已经有一个 main.m 文件,其中有一个 main 函数。 这将启动应用程序委托(delegate)。该应用程序委托(delegate)会告诉您应用程序何时完成启动、转到后台、进入前台等。 当应用程序完成启动时,您将转到第一个实际屏幕。 在那里,您添加 subview 。您不会在每一帧都绘制它们。一旦您将 View 添加到父 View ,该操作就会自动为您完成。 iOS 上的编程是基于事件的。您不必检查触摸并查看是否 触摸位置在按钮上,然后调用该按钮的方法。 相反,您为按钮设置一个回调方法,一旦按下按钮,它就会自动为您调用。 当然,您首先需要分配按钮并将其添加到父 View 。

一旦您习惯了这种基于事件的编程模型,您一定会喜欢上它。 一开始它可能会很不一样,也许对你来说没有意义,但别担心。 来自 C++ 背景肯定是一个好的开始。

干杯,

乔治

编辑:在那种情况下,我可以提供更具体的信息:因此,您从第一个屏幕中的 AppDelegate 开始。我们称它为 MainAppScreen。现在,您需要添加这 2 个按钮并为它们设置选择器(回调方法)。我可以看到你已经这样做了。

现在:

- (IBAction)playPressed:(UIButton *)sender
{
running = TRUE;
[self performSelectorInBackground:@selector(myLoop) withObject:nil];
}
- (IBAction)stopPressed:(UIButton *)sender
{
running = FALSE;
}
- (void) myLoop
{
while(running)
{
//this is your loop. You can code in here.
}
}

其中running是MainAppScreen类中的一个实例变量。

希望这对您有所帮助。

干杯!

关于objective-c - 创建 iOS 应用程序时,主循环去了哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11362918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com