この問題に何時間も座った後(私は本当にドラゴンの卵に乗った鶏のように感じます)、私はここに来て尋ねます。
問題は次のとおりです。タイマー(mach_absolute_time()で作成)を使用した非同期キューがあり、一定の時間間隔が経過すると、NSNotificationがdefaultCenterに渡され、メソッドが実行されます。runメソッドには、ビューの交差を見つけるためのメソッド呼び出しがあります。私は最近ARCに切り替えました。それは本当に良い考えのようだったからです。少し残念ですが、ARC以前から、このコードは正しく割り当ておよび割り当て解除されましたが、現在はそれ自体のみを割り当てています。手動で割り当てを解除するためのコードが欠落している可能性がありますが、ビューをnilに設定しようとすると、まったく役に立ちませんでした。また、Allocationsでは、その交差メソッドのためにmalloc 4.00 KBが上昇し続けます。これが、しばらくすると制限に達したときにメモリ警告が表示され、アプリがクラッシュするため、私が尋ねる理由です。
この方法が必要な理由は、障害物のあるビューのサブビューを反復処理するためです。そして、いくつかのサブビューからの別のビューの距離が限界に達したとき、私はいくつかのコードを実行します。
さて、いくつかのコードについて:これは非常に多くのメモリを割り当てるメソッドであり、正確にはその最初の行です(ARC以前はずっと長かったのですが、割り当てを作成するものを取得するために減らしました)。削除すると、無限の割り当てが停止します。もう一度注意してください。このメソッドは、1秒間に非常に多くの回数呼び出され、メインキューとは別のキューで呼び出されます。
- (BOOL)obstacleIntersect {
UIView *view = [[self subviews] objectAtIndex:0];
return NO;
}
そして、これは割り当てでどのように見えるかです: 割り当て
この長い質問の終わりに達したばかりなので、助けてくれてありがとう。
編集:これは、コードがすべての機能などでどのように見えるかです。上記のコードを1行だけで投稿した理由は、正常に機能するかどうかは気にしないため、割り当てを解決したいだけです。問題。誤解を招く恐れがあります。uiviewパーティクルは、前述のサブビューと交差するビューです。このコードも同じ無限の割り当てを生成します。
- (BOOL)obstacleIntersect {
for(UIView *view in [[[self subviews] objectAtIndex:0] subviews])
{
if (sqrt(pow(abs(particle.center.x - view.center.x), 2) + pow(abs(particle.center.y - view.center.y), 2)) < particle.frame.size.width / 2 - 1)
{
return YES;
}
}
return NO;
}