It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
6年前关闭。
顺便说一句:这主要是针对iOS 6+:
我有一个应用程序-从应用程序中的许多不同位置执行功能可以安全地后台运行并且是线程安全的。我不希望在此功能发生时停止系统,所以与其将其调用为:
我的问题是:我已经开始对此进行调查,仅仅是因为我讨厌计时器的想法...它们似乎已排队,并且不让系统(在我看来)决定在哪个顺序中执行它们。他们……或者-确实是同时。你永远都不会知道。因此,出现了NSNotification:
现在,哪个对系统更好……从资源角度来说,实际上,到处都是? NSTimer还是NSNotification?
显然,NSNotification的好处是,一旦在appDelegate中定义,就可以从应用的任何方面调用它。 NSTimer能够做到这一点,但是它需要必需的“目标”……一些额外的行来查找目标,等等。
有什么建议吗?
需要使用自动释放池正确设置后台线程。假设您正在使用ARC,请通过确保您的
更好的是,使用GCD(中央调度)而不是使用
如果
6年前关闭。
顺便说一句:这主要是针对iOS 6+:
我有一个应用程序-从应用程序中的许多不同位置执行功能可以安全地后台运行并且是线程安全的。我不希望在此功能发生时停止系统,所以与其将其调用为:
[self functionName];
当前我以很短的间隔触发了NSTimer: [NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(doThis:) userInfo:@"someString" repeats:NO];
我的问题是:我已经开始对此进行调查,仅仅是因为我讨厌计时器的想法...它们似乎已排队,并且不让系统(在我看来)决定在哪个顺序中执行它们。他们……或者-确实是同时。你永远都不会知道。因此,出现了NSNotification:
[[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:@"doThis" object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"a",@"varA",@"b",@"varB",nil]];
现在,哪个对系统更好……从资源角度来说,实际上,到处都是? NSTimer还是NSNotification?
显然,NSNotification的好处是,一旦在appDelegate中定义,就可以从应用的任何方面调用它。 NSTimer能够做到这一点,但是它需要必需的“目标”……一些额外的行来查找目标,等等。
有什么建议吗?
最佳答案
计时器和通知都不适合于此。只需在后台运行该方法即可。您有几种选择:
[self performSelectorInBackground:@selector(doThis:) withObject:@"someString"];
需要使用自动释放池正确设置后台线程。假设您正在使用ARC,请通过确保您的
doThis:
方法如下所示来执行此操作:- (void)doThis:(NSString *)someParam {
@autoreleasepool {
// rest of the code here
}
}
更好的是,使用GCD(中央调度)而不是使用
performSelectorInBackground:withObject:
:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self doThis:@"someString:];
});
如果
doThis:
不执行任何可更新用户界面的操作,则此方法很好。如果doThis:
确实需要在某个时刻更新用户界面,则必须在主线程上完成界面代码。该代码应包装在:dispatch_async(dispatch_get_main_queue(), ^{
// perform UI update here
});
10-08 05:55