我在通話過程中進行了一些後臺處理實驗,發現我無法獲得performSelector:withObject:afterDelay調用來觸發if它是從一個塊內部間接調用的,但是如果直接調用它將會觸發。performSelector:withObject:afterDelay當通過塊間接調用時不會被調用,但在其他情況下不會調用
這段代碼顯示了我的意思是:
@implementation MyAppDelegate
- (void) sausages
{
NSLog(@"*************Sausages");
[self performSelector:@selector(sausages) withObject:nil afterDelay:10];
}
- (void) sausages2
{
NSLog(@"*************Sausages 2");
[self performSelector:@selector(sausages2) withObject:nil afterDelay:10];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[self sausages2];
MyAppDelegate __weak *weakSelf = self;
[self.callCenter setCallEventHandler:^(CTCall *call)
{
if ([call.callState isEqualToString: CTCallStateIncoming])
{
NSLog(@"Incomming");
[weakSelf sausages];
}
}];
當我運行這段代碼和應用程序切換到後臺,則sausages2方法獲取每10秒觸發(應用程序在沒有顯示的位置後臺模式代碼片段)。
當我打電話給設備並接聽電話時,在通話過程中,sausages2方法每10秒鐘仍會繼續觸發,但是香腸方法只觸發一次。這是爲什麼?爲什麼香腸方法在調用過程中不斷被調用,但是香腸2方法是?
可能你需要你的香腸功能在主隊列上執行選擇器?只是一個猜測。 – Augie