ピークメモリフットプリントの削減
一般に、自動解放されたオブジェクトの生成を回避することがベストプラクティスと見なされます。
[この段落の大部分はこの質問から修正されました。]通常(1)はその存続期間を直接制御できないため、自動解放されたオブジェクトは比較的長期間存続し、アプリケーションのメモリフットプリントを不必要に増やす可能性があります。デスクトップではこれはほとんど重要ではないかもしれませんが、より制約のあるプラットフォームでは、これは重大な問題になる可能性があります。したがって、すべてのプラットフォームで、特により制約のあるプラットフォームでは、可能であれば、自動解放されたオブジェクトにつながるメソッドを使用することを強くお勧めしません。代わりに、alloc/initパターンを使用することをお勧めします。
これを置き換えることをお勧めします:
theData = [NSData dataWithContentsOfFile:inFile];
と:
theData = [[NSData alloc] initWithContentsOfFile:inFile];
次に、メソッドの最後に次を追加します。
[theData release];
これはtheData
、メソッドが終了する前に割り当てが解除されることを意味します。最終的には次のようになります。
- (void)readVenueArchiveFile:(NSString *)inFile key:(NSString *)inKey
{
NSMutableData *theData;
NSKeyedUnarchiver *decoder;
theData = [[NSData alloc] initWithContentsOfFile:inFile];
decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:theData];
ListClassName *decodedList = [decoder decodeObjectForKey:inKey];
self.venueIOList = decodedList;
[decoder finishDecoding];
[decoder release];
[theData release];
}
これにより、メモリ管理のセマンティクスが明確になり、可能な限り迅速にメモリが再利用されます。
(1)独自のローカル自動解放プールを使用して制御できます。詳細については、Appleのメモリ管理プログラミングガイドを参照してください。