我正在用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
(或类似的东西 - 目前不记得确切的细节!