Memory leaks 使用加速度计数据时内存泄漏

Memory leaks 使用加速度计数据时内存泄漏,memory-leaks,Memory Leaks,以下所有操作都在一个线程中执行(不是主线程) 当我在Xcode->Instruments中运行应用程序时,我发现活动内存不断增加, 直到应用程序收到内存预热并被系统终止。 我尝试在while块中释放加速度计数据。但没有效果。motionManager.accelerometerData release] 我不希望使用startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerome

以下所有操作都在一个线程中执行(不是主线程)

当我在Xcode->Instruments中运行应用程序时,我发现活动内存不断增加, 直到应用程序收到内存预热并被系统终止。 我尝试在while块中释放加速度计数据。但没有效果。motionManager.accelerometerData release]

我不希望使用startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData*accelerometerData,NSError*error),因为我想在后台运行它,并且当应用程序挂起时,此块不起作用

-(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