0

行き止まりになったとき、私は自分のこの新しいアプリをリリースするのが本当に近いと思っていました。私のコードは、シミュレータ (Xcode 4.0.2) ではメモリ リークなしで動作しますが、デバイスでメモリ リークが報告されます。

私の問題は、オブジェクトをコピーすることに関連していると思います。これは、トラブルシューティングの試みでコピーなしで試したところ、メモリ リークがなくなったためです (もちろん、機能もそうです!)。

私がしていることは、UIView のサブクラスのインスタンスを配列に追加することです。このサブクラス (cityToAdd がインスタンスである都市) には、後の段階でアクセスする必要がある 2 つの UIView といくつかの変数があります。

これを行うと、デバイスでメモリ リークが発生します。

[arrayOfCities addObject:[[cityToAdd mutableCopy] autorelease]];

しかし、私がこれを行うと、私はしません (ただし、機能が失われます)

[arrayOfCities addObject:cityToAdd];

サブクラスでは、コピーを処理するためにこれを持っています:

- (id)mutableCopyWithZone:(NSZone *)zone{

Cities *newCity = [[Cities allocWithZone:zone] init];

[newCity initWithCityName:cityName 
                   onRing:ring 
             withTimeZone:timeZone 
       withTimeZoneOffset:timeZoneOffset 
             withDSTAngle:DSTAngle 
                   andDST:isDST];

 return newCity;

}

Instruments から、デバイスでテストするときにこれを取得します。

ここに画像の説明を入力

2 行目をドリルダウンすると、次のように表示されます。 ここに画像の説明を入力

最後に私のinitWithCityNameメソッド(こんなに長い投稿でごめんなさい!!)Instrumentsから色とメッセージを取得するための画像としてそれを入れました...

ここに画像の説明を入力

最後に、UIIMage imageNamedUniversal は、iPad で @2x 画像を提供するための拡張機能です (ただし、通常の imageNamed で試したところ、同じメモリ リークが発生しました)。

どこから始めればいいのかわからない!! どんなアイデアでも大歓迎です。

ありがとう

4

3 に答える 3

0

迅速な返信と提案に感謝します。あなたは私を正しい軌道に乗せました。配列に追加した cityToAdd はループ内で数回追加されましたが、alloc と init はループの外に置いておきました。ループ内に移動すると、シミュレーターとデバイスの両方で機能します。

ただし、シミュレーターがそのメモリリークを報告しないのは奇妙です...

繰り返しますが、迅速な返信に感謝します!

于 2011-06-01T03:21:21.470 に答える
0

2 つの初期化メソッドを呼び出すのはなぜですか? initinitWithCityNameを呼び出しています....

于 2011-06-01T02:12:35.503 に答える
0

考慮すべき 2 つの点:

サブビューとして cityView と DSTView を追加したら、それらを解放することができます。

そして、copyWithZone で newCity を 2 回初期化しています。

于 2011-06-01T02:13:42.263 に答える