我正在写一个基础工具.我必须将线程分成不同的正在进行的任务.
我试图做线程,但它一直在崩溃.最后我想出了我需要运行自己的runloop的原因.
有人可以用一些简单的例子来帮助吗?我试过跟随代码,但它不起作用.我每次运行它都会遇到异常崩溃?如何在Foundation工具中运行线程?
@interface MyClass : NSObject
{
}
-(void) doSomething;
@end
@implementation MyClass
-(void) RunProcess:
{
printf("test");
}
-(void) doSomething:
{
[NSThread detachNewThreadSelector: @selector(RunProcess:) toTarget:self withObject: nil];
}
@end
int main(void)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MyClass *myObj = [[MyClass alloc] init],
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 myObj selector:@selector(doSomething:) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个关于autorelease的问题,现在我有以下代码:
int main(int argc, char *argv[]){
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}}
Run Code Online (Sandbox Code Playgroud)
doc在@autoreleasepool {}结尾处说标记为autorelease的对象将收到一条释放消息.但是UIApplicationMain永远不会返回,这意味着流程永远不会到达@autoreleasepool的末尾,那么标记为autorelease的对象将永远不会释放,直到应用程序死掉.自动释放没有意义.....
我问过有人说iOS系统会生成一些线程,(你知道,一个线程,一个runloop).他说runloop会创建自动释放池.所以自动释放对象将在thead或runloop结束时释放.但在大多数情况下我们使用主线程.所以他所说的并不能说服我.
什么是使用自动释放的适当时间.它困惑了我很长一段时间.
我得到另一个观点,当一个runloop结束时,autorelease对象将被释放(主runloop将存在所有应用程序的生命?)所以我不确定..
任何要点和相关文件将不胜感激!
TLDR:我想知道UndoManager从后台线程使用时如何基于运行循环自动撤消分组,而我的最佳选择是什么。
我使用UndoManager(以前NSUndoManager在与iOS和MacOS的目标定制的斯威夫特框架)。
在框架中,工作体面量呈现背景GCD串行队列的地方。我了解UndoManager每个运行循环周期会自动将顶级注册的撤消操作分组,但是我不确定不同的线程情况将如何影响这种情况。
我的问题:
UndoManager的run环路注册撤消操作的分组?在下面的所有情况下,假定methodCausingUndoRegistration()并且anotherMethodCausingUndoRegistration()没有幻想,可以UndoManager.registerUndo在没有任何分派的情况下从调用它们的线程进行调用。
// Assume this runs on main thread
methodCausingUndoRegistration()
// Other code here
anotherMethodCausingUndoRegistration()
// Also assume every other undo registration in this framework takes place inline on the main thread
Run Code Online (Sandbox Code Playgroud)
我的理解:这就是UndoManager预期的用法。上面的两个撤消注册都将在同一运行循环周期中进行,因此将被放置在同一撤消组中。
// Assume this runs on an arbitrary background thread, possibly managed by GCD.
// It is guaranteed not to run on …Run Code Online (Sandbox Code Playgroud) 每个人Thread都有自己的RunLoop,如何DispatchQueue与他们互动?是DispatchQueue使用RunLoop分派任务Thread还是以其他方式完成?
nsoperationqueue grand-central-dispatch runloop swift dispatch-queue
在Linux下的X11和使用GTK +你有一个叫做"主循环"的东西.一旦启动主循环,就会有一个在应用程序主线程中运行的计时器.您可以将该计时器设置为回调函数,并且您有一个非常好的应用程序范围的计时器.
这是示例代码:
GMainLoop *loop;
if(!loop_running)
{
display = XOpenDisplay( NULL );
loop = g_main_loop_new(NULL, FALSE);
g_timeout_add(1000, (GSourceFunc)callback, NULL); //1 sec laps
g_main_loop_run(loop); //to stop use g_main_loop_quit () with the "loop" as arg
loop_running=1;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试为Mac OS X编写类似的应用程序而不是主循环,我使用的是一个简单的计时器:
- (void) handleTimer: (NSTimer *) timer
{
CopyDataToDB();
} // handleTimer
- (IBAction)startStopAction:(id)sender
{
isOn=!isOn;
if(isOn)
{
// Add our timers to the EventTracking loop
[[NSRunLoop currentRunLoop] addTimer: time forMode: NSEventTrackingRunLoopMode];
// Add our timers to the ModelPanel loop
[[NSRunLoop currentRunLoop] addTimer: …Run Code Online (Sandbox Code Playgroud) 我有一个类名,因为myClassCalculate具有以下方法
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
NSLog(@"Accelerometer is called");
}
Run Code Online (Sandbox Code Playgroud)
我正在制作对象
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
myObject = [[myClassCalculate alloc] init];
Run Code Online (Sandbox Code Playgroud)
现在当应用程序进入后台时,我想要这个
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
Run Code Online (Sandbox Code Playgroud)
我该怎么做,以便在app后台调用此方法
谢谢
例如在cocos2D中:
- (void)update:(ccTime)delta
Run Code Online (Sandbox Code Playgroud)
谁能解释这些时间增量或时间戳用于什么?它们如何与游戏世界的更新相关?是因为我们不能可靠地知道fps而不应该只依赖于基于-update调用的增量属性更新?
runloop ×7
ios ×3
cocoa ×2
macos ×2
swift ×2
appkit ×1
autorelease ×1
game-engine ×1
iphone ×1
nsthread ×1
objective-c ×1
opengl-es ×1