创buildiOS应用程序时,主循环在哪里?
我正在为Xcode中的iPhone编写一个iOS应用程序,并且在各自的.h和.m文件中创build了一些类以及它们的方法(这是两个类,所以基本上我有两对.h&.m文件)
我现在要开始编写我的主循环 ,只要用户点击播放button,就会执行这个循环 ,但是我到底在做什么?
我在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 ? }
我在这里读到了一个类似的问题,有人build议AppDelegate。 现在将是AppDelegate.m或AppDelegate.h? 如果是这样的话,我开始写代码,还是将所有东西都包含进来:
int main(int argc, char **argv) { .... }
在Appdelegate文件中?
我试图简单地开始实例化类和声明generics方法(不属于任何特定的类是..)在我创build一个game.m文件,我得到一个初始化元素不是一个编译时常量警告只要我尝试实例化任何东西
任何帮助? 来自c + +它真的能帮我澄清一下,在哪个文件正好写我的主循环,是否应该包装它在某种types的int main()函数..
谢谢!
PS:
以防万一它有什么区别,我的ViewController将只包含一个播放button,只要按下它,将开始执行我的主循环,一个停止button,将终止执行主循环
我在ViewController.m中创build了各自的方法:
- (IBAction)playPressed:(UIButton *)sender { // } - (IBAction)stopPressed:(UIButton *)sender { // ?? }
这是暂时的空:)
iOS上的编程方法不同于C ++方法。 在C ++中,事实上,你必须做出一个无限循环,并在每一帧获取触摸,绘制所有东西等。 直到玩家按下“退出”,你打破循环。 在iOS上,事情完成方式不同:您已经有一个main.m文件,其中有一个主要function。 这启动了应用程序委托。 该应用程序委托告诉你什么时候应用程序完成启动,去背景,前景,等等。当应用程序完成启动,你去你的第一个实际的屏幕。 在那里,你添加子视图。 你不要在每一帧画他们。 一旦将视图添加到父视图,该操作就会自动完成。 iOS上的编程基于事件。 您不必检查触摸,并查看触摸位置是否在button上,然后调用该button的方法。 相反,您为该button设置callback方法,一旦按下该button,就会自动调用该方法。 当然,你首先需要分配button并将其添加到父视图。
一旦你习惯了这个基于事件的编程模型,你一定会喜欢它。 开始的时候可能会有很大的差别,也许对你没有意义,但是不用担心。 从C ++背景下来肯定是一个好的开始。
干杯,
乔治
编辑:在这种情况下,我可以给更具体的信息:所以,你从AppDelegate在你的第一个屏幕上。 我们称之为MainAppScreen。 现在,你需要添加这两个button并为它们设置select器(callback方法)。 我可以看到你已经做到了。
现在:
- (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类中的一个实例variables。
希望这可以帮助。
干杯!
每个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
和至less一些Apple提供的框架是一个很好的开始。
您在iOS应用程序中没有main
(从技术上讲,您确实有一个主要的,但您不必担心写入)。 这一切都为你处理。 runloop也都是为你完成的。 所有你需要做的就是创build你的button,然后告诉它(通过addTarget方法)当它被按下时运行哪个方法。
更新:这是你需要做的伪(ISH)代码….
[startButton addTarget:@selector(startPressed:)]; [stopButton addTarget:@selector(stopPressed:)]; -(void)startPressed { backgroundThread = [[NSThread alloc] initWithWhateverYouWantToRun]; [backgroundThread start]; } -(void)stopPressed { [backgroundThread stop]; }
在你的后台线程中,如果你想更新UI,你可以调用sendMessageOnMainThread
(或类似的东西 – 目前不记得确切的细节!)