iPhone - appDid becomeActive の間で配列が失われました:実行ループが開始されますか?

StackOverflow https://stackoverflow.com/questions/2073488

質問

編集:配列を初期化した直後に配列を手動で保持するための 1 回の呼び出しでスタックし、それが修正されました。デュア。ありがとう。

NSMutableArray を UIScrollView サブクラスに保持し、UIImageView サブクラスのインスタンスをそれぞれサブビューとして追加します。最終的には配列内の順序を再配置する予定なので、可変配列である必要があります。このバグは、私がそうしようとする前に発生しています。NSLogs を使用して、applicationDid becomeActive までの配列のカウントが 10 であることを示しました。私のAppDelegateで呼び出され、実行ループで0.001秒ごとに起動するタイマーを追加しました。初めて起動したとき、配列が見つかりません。私は非常に混乱しており、何時間もこれを追跡しようとしています。

タイマーは正常に動作しています (つまり、printCount の場合:配列にアクセスしないので大丈夫です)、そこにある配列にアクセスしようとしたときにのみ壊れます。printCount への通常の呼び出し:以下は機能しますが、最初にタイマーが起動したとき、printCount: へのこれら 2 つの呼び出しの間に何が起こっている可能性がありますか?

- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.001f
                                                       target:[viewController view]
                                                     selector:@selector(printCount)
                                                     userInfo:nil
                                                      repeats:YES]
                      retain];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
    [[viewController view] printCount];
}

私はデバッガーを使用して延々とプログラムをステップ実行してきました。配列はこの時点までは正しく、その内容が変更された後でもそのメモリ アドレスは同じです。ただし、その後はオブジェクトのみが存在し、その 10 個の要素が単一の UITouchData インスタンスに置き換えられます。それがどこから来たのか分かりません。私のイベント処理メソッドはいずれも、配列の再割り当てや変更を試みません。何が問題になっているのか考えられますか?完全に困惑してしまいました。

役に立ちましたか?

解決

しましたか? -retain 配列は?

他のヒント

おそらくあなたのオブジェクトは解放されましたか?そのままにしておくとどうなるのか。それはうまくいきますか、それとも単にメモリリークが発生しただけですか?

その10の要素は、単一のuitouchdataインスタンスに置き換えられます。どこから来たのかわからない。

それは常に UITouchData インスタンスですか?いつも?-- 原因は、(毎回同じではないとしても) メモリの問題の完全な結果のように思えるからです。

初期化直後に配列を保持する呼び出しを実行してしまい、修正されました。デュア。

ご提案ありがとうございます。このような問題ではよくあることですが、それは非常に単純で、最終的には諦めて助けを求めることが解決策のきっかけとなり、自分が愚かだと感じました。:D

ビューは配列を初期化して解放しますか?
NSView はその間にはリリースされないでしょうか?
メモリアドレスがあるかどうかを確認できます [viewController view] (== 内なる自己 printCount) タイマーが呼び出すたびに同じです printCount.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top