アプリのメイン スレッドで初期化するオブジェクトがありますが、そのメソッドの 1 つをバックグラウンド スレッドで呼び出しますperformSelectorInBakground
。ただし、メソッドは応答しないようです。すなわち :
AccHandler.m
#import "AccHandler.h"
@implementation AccHandler
@synthesize accelerationOnYaxis;
-(void)startAccelerationUpdates
{
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.01;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error)
{
self.accelerationOnYaxis = motion.userAcceleration.y;
}
];
}
@end
Tester.m
#import "Tester.h"
@interface Tester()
{
AccHandler *accHandler;
}
@end
@implementation Tester
- (id) init
{
//....
accHandler = [[AccHandler alloc] init]; // initialized in main thread
}
-(void)test
{
[accHandler startAccelerationUpdates]; // but -(void)test will be executed in a background thread..
NSLog(@"current acceleration is %f", accHandler.accelerationOnYaxis;
}
後で私のコードでtest
メソッドを a から呼び出しますが、performSelectorInBackground
加速度値が 0 になります..