2013-03-19 86 views
1

當我的處理程序被系統調用時,我似乎放棄了一些指向實例變量的指針。iOS keepAlive回調實例變量

在我的.m實現我

@implementation BackgroundWorker 

MyApplication* myApp; 
NSDate* lastUpdate; 

,並在我的處理程序變量不再有效:

[[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ 

    // myApp is valid however 

    // Check that enough time has passed 
    NSDate* now = [NSDate date]; 

    if (lastUpdate == nil ||   // <--- lastUpdate not a valid object 
    [now timeIntervalSinceDate:lastUpdate] >= TIME_RESOLUTION_SEC) { 

    // do stuff 

    lastUpdate = now; 
    } 

}]; 

我初始化LASTUPDATE正確的類方法,它是有效的第一次運行該應用程序,但如果它轉到後臺並且調用該處理程序,則該變量不再有效。

任何告訴操作系統不要銷燬/清除背景回調之間的實例變量的方法嗎?

回答

1

將值存儲在應用程序委託中,但我很可能將其存儲在NSUserdefaults中,並在每次需要時將值提取出來。如果用戶殺死該應用,這也會保持該值。

+1

謝謝你,我現在正在做什麼,但我想知道是否有辦法避免從NSUserdefaults進來的IO。當實例被刷新時是否有可能「檢測」? – George 2013-03-22 16:57:46

+0

您是否嘗試通過屬性使變量可訪問? – 2013-03-22 18:01:39

+0

你是說你在後臺調用處理程序(塊)嗎?或者你是說它從後臺返回並調用處理程序(塊),並且它不能正確執行。 – 2013-03-22 18:11:05