私はメモリ警告を受け取っているiPhoneアプリを持っているので、私は、Instrumentsの助けを借りて、リークを見つけようとしているか、メモリのより効率的な使用などを試みています。とりわけ、私は自動解放されたオブジェクトを取り出し、手動のalloc/init/releaseオブジェクトに置き換えようとしています。ただし、一部のAPI呼び出しでは、 'init'バージョンはありません(下記のコードを参照)。Instruments Using Leaks&Object Alloc:自動リリースされたオブジェクトはリークとしてカウントされますか?
私はAPIの「を呼び出す」と背面基本的に自動解放オブジェクトを取得する場合には、これらのオブジェクトは、楽器の漏れとして表示することができます:私は確かにいくつかの基本的な誤解がありますか?インストゥルメントでこのような動作が見られるようです。
「はい」の場合は、「非自動解除」の代替方法がなく、必要なAPIを使用している場合は無視してください。また、このコードが多く呼び出された場合、私は完全にアルゴリズムを再考する必要がありますか?
私のアプリケーションでは、多くのものが呼び出されるユーティリティコードがあります。基本的に、2つの日付が意味的に「等しい」かどうかを判断します。コメント付きのコードに残しておいて、コードベースで改善するタイプを確認することができます。このDIDは、NSDateを手動で作成し始めてから、器具を実行したときにメモリリークを減らします)助けてくれた。しかし、私はまだ私がリークしていると信じ日付コンポーネントオブジェクトを持っている...しかし、それは、APIの呼び出しです(書式設定コードのため申し訳ありませんが、私はSOそれを改善するように見えることはできません):
+ (BOOL)isDayEqualToDay:(NSDate*)date anotherDate:(NSDate*)anotherDate
{
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
//NSCalendar *cal;
NSDateComponents *componentsFromDate, *componentsFromAnotherDate;
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
//cal = [NSCalendar currentCalendar];
componentsFromDate = [cal components:unitFlags fromDate:date];
componentsFromAnotherDate = [cal components:unitFlags fromDate:anotherDate];
BOOL bDatesEqual = ([componentsFromDate year] == [componentsFromAnotherDate year] &&
[componentsFromDate month] == [componentsFromAnotherDate month] &&
[componentsFromDate day] == [componentsFromAnotherDate day]);
[cal release];
return bDatesEqual;
/*
return (
[componentsFromDate year] == [componentsFromAnotherDate year] &&
[componentsFromDate month] == [componentsFromAnotherDate month] &&
[componentsFromDate day] == [componentsFromAnotherDate day]
);*/
}
私は思いますcomponentsFromDateとcomponentsFromAnotherDateはリークとして表示されますが、本質的にはNSData API呼び出しから返されたオブジェクト(オートリリース済み)だけです。これをより効率的にするために他に何ができるのかよくわからないので、Instrumentsをどのように使いこなすかについて私は理解していますか?提案?
GDCのデバッグにintstrumentsを使用する方法はないようです。多分別の方法がありますか? –