Memory leaks 使用加速度计数据时内存泄漏
以下所有操作都在一个线程中执行(不是主线程) 当我在Xcode->Instruments中运行应用程序时,我发现活动内存不断增加, 直到应用程序收到内存预热并被系统终止。 我尝试在while块中释放加速度计数据。但没有效果。motionManager.accelerometerData release] 我不希望使用startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData*accelerometerData,NSError*error),因为我想在后台运行它,并且当应用程序挂起时,此块不起作用Memory leaks 使用加速度计数据时内存泄漏,memory-leaks,Memory Leaks,以下所有操作都在一个线程中执行(不是主线程) 当我在Xcode->Instruments中运行应用程序时,我发现活动内存不断增加, 直到应用程序收到内存预热并被系统终止。 我尝试在while块中释放加速度计数据。但没有效果。motionManager.accelerometerData release] 我不希望使用startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerome
-(void)handle{
[motionManager startAccelerometerUpdates];
while (1) {
CMAcceleration acceleration = motionManager.accelerometerData.acceleration;
NSLog(@"%f %f %f",acceleration.x,acceleration.y,acceleration.z);
sleep(0.5);
}
}
你在用ARC吗?你应该用它 您还必须确保bakground线程有一个自动释放池。创建启用ARC的自动释放池的语法是
@autorelease{…}
,没有ARC的语法是NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init]。。。[池释放]代码>
苹果有关于自动释放池如何工作的优秀文档。一个是为主线程自动创建的,但必须为后台线程手动创建。你需要花几个小时学习它是如何工作的,这是任何obj-c程序员的必修课
没有看到你所有的代码,我无法告诉你它需要如何工作。。。但最有可能的是,创建线程的块或方法需要将其内容包装在自动释放池中,而循环的内容也需要第二个自动释放池
编辑:现在我已经看到了您的代码,下面是一个如何使用@autoreleasepool来避免内存泄漏的示例。我在代码中添加了第6行和第23行:
我还没有测试,但这应该可以解决你的问题。如果没有这些自动释放池,它肯定会泄漏内存
基本上,如果您有一个后台线程或长时间循环,则每个线程都需要有自己的自动释放池。我建议阅读以下内容:我尝试使用@autorelease{…}或NSAutoreleasePool,但问题始终存在。我的项目网址:非常感谢。问题已经用你的方法解决了。
-(void)handle{
[motionManager startAccelerometerUpdates];
while (1) {
CMAcceleration acceleration = motionManager.accelerometerData.acceleration;
NSLog(@"%f %f %f",acceleration.x,acceleration.y,acceleration.z);
sleep(0.5);
}
}
Can anyone help me?
screenshot image:http://img.blog.csdn.net/20130702120140593