0

このチュートリアルに従いました: http://blogs.captechconsulting.com/blog/john-morrison/ios-getting-started-accelerometer-dataで、iPhone アプリに加速度計をリッスンさせました。CMMotionManager を AppDelegate に追加し、viewcontroller でアプリケーションの CMMotionManager を読み取るプロパティを追加しました。現在、アプリでメモリ使用量の警告が表示されています。

アプリをメモリ プロファイラ インストゥルメントに接続したところ、アプリケーションと対話しておらず、テーブルの上に静止しているときに、メモリ使用量が直線的に増加することがわかりました。犯人は次のコードにあるようです。

[self.motionManager setDeviceMotionUpdateInterval:0.1];
aQueue=[[NSOperationQueue alloc]init];
[self.motionManager     startDeviceMotionUpdatesToQueue:aQueue
 withHandler:^(CMDeviceMotion *motion, NSError *error)
 {
     if (motion.userAcceleration.x > movementThreshold || motion.userAcceleration.y > movementThreshold || motion.userAcceleration.z > movementThreshold) {
         movementCount = 5;
     };

     motion = nil;
 }];

最初の例ではキューがインラインで定義されていましたが、最後の手段としてキューをビュー コントローラーのメンバー変数に移動しましたが、どちらもあまり効果がないようです。更新間隔をオンにしないと、メモリ使用量が増えません。更新間隔をオンにすると、メモリが大きくなります。

motionCount は、viewController のプライベート int として宣言され、最近の電話の動きを追跡するために使用されています。別のスレッドは、時間の経過とともにカウンターをゆっくりとゼロにリセットします...しかし、そのスレッドを有効/無効にしてもメモリ使用量に影響を与えないようですので、そのコードは省略しました...

CMMotionManager が過度のメモリ使用量を引き起こす可能性があるという Web 上の警告は何も表示されませんが、アプリを実行したままにしておくと、1 分ごとにさらに 5 メガバイトのメモリが消費されます...私の問題?...

4

1 に答える 1