私はこの質問にタイトルを付ける方法を本当に知りませんでしたが、これが本当に私を殺すものです:私のアプリにはUITableView、UISegmentedControl、およびUINavigationBarがあります。UISegmentedControlがそのセグメントの1つを選択したら、UINavigationBarにUIActivityIndicatorViewを表示し、xmlファイルを解析して結果をテーブルに表示します。UIIndicatorViewをUINavigationBarに追加するメソッドshowLoadingは、パーサーが初期化される前に取得しますが、1つを除いて、すべてがほぼ希望どおりに機能します。ただし、パーサーの終了後にアクティビティインジケータービューがuinavigationbarに追加されます。誰かがそれを説明できますか?私が見逃しているかもしれない何かがありますか?たぶん、UIを再描画する必要がありますか?ありがとうピーター
1 に答える
0
メインスレッドでxmlを解析しているように見えるため、UIの変更がブロックされます。xml解析を別のスレッドに移動してみてください(たとえば、を介して解析メソッドを呼び出すことによって-performSelectorInBackground:
)
編集:実際には、(ほぼ確実に)autorelease
アプリケーションで暗黙的に使用しています-多くの標準関数が自動解放されたオブジェクトを返すためです。関数を別のスレッドで実行している場合は、NSAutoreleasePool
自動解放されたオブジェクトを処理し、メモリリークを回避するために、そこにオブジェクトを作成する必要があります(ドキュメントの自動解放プールを参照)。したがって、parseXML関数は次のようになります。
- (void)parseXML{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
... //xml parsing routines etc
[pool release];
}
于 2010-03-09T09:58:31.727 に答える