我有一个对象,我在应用程序的主线程中初始化,但我使用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
调用performSelectorInBackground
方法,但我得到0个加速度值..
答案 0 :(得分:2)
可以在主线程中初始化一个对象并使用其方法 在一个单独的线程中执行?
是
你的错误似乎是你不是在等待背景材料产生结果。
另一个问题可能是某些强引用似乎没有保留motionManager
。所以它可能会在初始化后立即消失。