创建 iOS 应用程序时,主循环将转到何处



我正在用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)
{
   ....
}

在应用程序委托文件中?

试图简单地开始实例化类并在我创建的 game.m 文件中声明泛型方法(不属于任何特定的类),并且一旦我尝试实例化任何东西,我就会得到一个初始值设定项元素不是编译时常量警告

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

谢谢!

附言 :

以防万一有任何不同,我的ViewController将只包含一个播放按钮,每当按下主循环时都会开始执行,以及一个停止按钮,它将终止主循环的执行

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

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

暂时是空的:)

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

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

干杯

乔治

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

现在:

- (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.
    }
}

其中运行是 MainAppScreen 类中的实例变量。

希望这有帮助。

干杯!

每个iOS应用程序以及每个可执行文件都有一个入口点 - 这是main()。可执行文件不能有多个入口点。如果你仔细观察这个项目,你会发现在 Xcode 导航器的Supporting Files组中有一个自动生成的main.m文件,如下所示:

#import <UIKit/UIKit.h>
#import "MyAppDelegate.h"
int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
    }
}

你想做什么还不够清楚,但这是一个很好的开始,了解iOS应用程序的结构和生命周期,objective-c语法,熟悉UIKit以及至少Apple提供的一些框架。

你在iOS应用程序中没有main(嗯,从技术上讲,你确实有一个main,但你不必担心编写它)。这一切都由您处理。运行循环也为您完成。您所要做的就是创建您的按钮,然后告诉它(通过addTarget方法)在按下时运行哪种方法。

更新:这是您需要做的伪(ish)代码....

[startButton addTarget:@selector(startPressed:)];
[stopButton addTarget:@selector(stopPressed:)];
-(void)startPressed {
  backgroundThread = [[NSThread alloc] initWithWhateverYouWantToRun];
  [backgroundThread start];
}
-(void)stopPressed {
  [backgroundThread stop];
}

在您的后台线程中,如果您想更新 UI,您会调用 sendMessageOnMainThread(或类似的东西 - 目前不记得确切的细节!

相关内容

  • 没有找到相关文章

最新更新