バックグラウンド スレッドで を実行していて、メイン スレッドでメモリ警告が表示されたときにNSOperation
、そのプロパティ ( という名前の float) を変更したいと考えています。runSpeed
ただし、次にバックグラウンド スレッドが runSpeed に到達すると、以前と同じ値になるように見えます。
NSOperation
メインスレッドで変更したときに、スレッドで変更されたことを確認するにはどうすればよいですか?
編集:
私はそれについて間違っていると思っていたので、もともとコードを投稿しませんでした。これが私のコードです:
AppDelegate
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
NSLog(@"memory warning");
if (dataUpdateIsActive) {
NSLog(@"data update is active");
dataUpdate.runSpeed = 10;
[NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(resetRunSpeed)
userInfo:nil
repeats:NO];
}
}
次に、メソッドで:
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
dataUpdate = [[JDataUpdate alloc] init];
[dataUpdate setOldPSC:[oldContext persistentStoreCoordinator]];
[dataUpdate setCurrentPSC:[newContext persistentStoreCoordinator]];
[dataUpdate setRunSpeed:0.5];
[dataUpdate setEntriesToCreate:250];
[dataUpdate setSaveFrequency:10];
dataUpdateIsActive = YES;
[operationQueue addOperation:dataUpdate];
それらの両方がNSLogs
トリガーされます。
NSオペレーション
- (void)main
{
for (NSInteger index = 0; index < [self entriesToCreate]; ++index) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:[self runSpeed]]];
}
}