SDWebImageソースコード解析(二)
1734 ワード
この文章は比較的短いので、前の文章に述べられていない問題をいくつか補充します.
1.前編では、SDImageCacheがディスクキャッシュのキーとして完全なURLを使用していると述べています.しかし、アクセス制御の目的でURLの一部がダイナミックになる場合があり、ディスクキャッシュが機能しないことがあります.
この問題について、SDWebImageManagerは、SDImageCacheを単独で使用することはなく、ソースコードを自分で変更する必要があるという解決策を示しています.cacheKeyFilterを設定し、NSURLを入力としてNSStringをキャッシュキーとして出力します.
SDWebImage GitHubホームページのコード例を次に示します.
2.今日面接に行った時、cleanDiskWithCompletionBlock:でNSdirectoryEnumeratorを使う性能について質問されました.NSdirectoryEnumeratorを使用してすべてのキャッシュ・ファイルを巡回すると、パフォーマンスに問題が発生するかどうか、改善する必要はありません.
stackoverflowを問い合わせると、NSdirectoryEnumeratorを使用してすべてのキャッシュ・ファイルを巡り、必要なファイル・サイズ情報などのファイル・プロパティを取得すると、パフォーマンスに問題はありません.NSdirectoryEnumeratorがファイルのプロパティを取得するには、ファイルのinodeデータを表示することで、想像していたfileopenやfilecloseは必要ありません.
inodeに含まれるUNIXユーザーがよく使用する重要な情報: inode番号 ファイルの種類、およびstat C関数を識別するためのモード情報 .ファイルのリンク樹木 属主のUID 属主のグループID(GID) ファイルのサイズ ファイルで使用するディスクブロックの実際の数 最近の修正時間 最近のアクセス時間 最近の変更時間 3.SDWebImageでNSCacheを直接使用しない理由について、サブクラスAutoPurgeCacheをカスタマイズする必要があります.
この問題を説明する前に、NSCacheを使うメリットを見てみましょう.
NSCacheのメリット:自動削減機能 スレッドセキュリティ は健 をコピーしません.
これは,NSDictionary自身がキャッシュを実装することなく,集合のようなNSCacheを選択した理由である.
しかし、このstackoverflowの問題により、NSCacheはiOS 7システムではメモリアラートに応答しないため、SDWebImageではNSCacheをサブクラス化し、自分でメモリアラートを傍受し、removeAllObjects.
1.前編では、SDImageCacheがディスクキャッシュのキーとして完全なURLを使用していると述べています.しかし、アクセス制御の目的でURLの一部がダイナミックになる場合があり、ディスクキャッシュが機能しないことがあります.
この問題について、SDWebImageManagerは、SDImageCacheを単独で使用することはなく、ソースコードを自分で変更する必要があるという解決策を示しています.cacheKeyFilterを設定し、NSURLを入力としてNSStringをキャッシュキーとして出力します.
SDWebImage GitHubホームページのコード例を次に示します.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
return [url absoluteString];
};
// Your app init code...
return YES;
}
2.今日面接に行った時、cleanDiskWithCompletionBlock:でNSdirectoryEnumeratorを使う性能について質問されました.NSdirectoryEnumeratorを使用してすべてのキャッシュ・ファイルを巡回すると、パフォーマンスに問題が発生するかどうか、改善する必要はありません.
stackoverflowを問い合わせると、NSdirectoryEnumeratorを使用してすべてのキャッシュ・ファイルを巡り、必要なファイル・サイズ情報などのファイル・プロパティを取得すると、パフォーマンスに問題はありません.NSdirectoryEnumeratorがファイルのプロパティを取得するには、ファイルのinodeデータを表示することで、想像していたfileopenやfilecloseは必要ありません.
inodeに含まれるUNIXユーザーがよく使用する重要な情報:
この問題を説明する前に、NSCacheを使うメリットを見てみましょう.
NSCacheのメリット:
これは,NSDictionary自身がキャッシュを実装することなく,集合のようなNSCacheを選択した理由である.
しかし、このstackoverflowの問題により、NSCacheはiOS 7システムではメモリアラートに応答しないため、SDWebImageではNSCacheをサブクラス化し、自分でメモリアラートを傍受し、removeAllObjects.