問題:
上記の場合、フレームワークは画像データをキャッシュします:
[UIImage imageNamed:]
キャッシュを発生させたくないので、それを置き換えることができます
[UIImage imageOfContentOfFile:]
解決したようですが、私のテストの後、xibのインスタンス化の進行状況で、フレームワークはimageOfContentOfFileではなくimageNamed :を使用します。
つまり、xib によって読み込まれた画像は引き続きキャッシュされます。
そこで、UIImage の imageNamed: メソッドをオーバーライドして、このメソッドをすべてキャッシュしないようにします。
--try1. カテゴリー:
@implementation UIImage (ImageNamedNoCache)
+ (UIImage *)imageNamed:(NSString *)name;
{
NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
return [UIImage imageWithContentsOfFile:path];
}
@end
--result:warning."カテゴリは、そのプライマリ クラスによっても実装されるメソッドを実装しています"
--try2. ランタイムはメソッドの imp を置き換えます
//get super method
Method method_imageNamed = class_getClassMethod([UIImage class], @selector(imageNamed:));
//get my method
Method method_myImageNamed = class_getClassMethod([self class], @selector(myImageNamed:));
//get my imp
IMP imp_myImageNamed = method_getImplementation(method_myImageNamed);
//set super method's imp to my imp
method_setImplementation(method_imageNamed, imp_myImageNamed);
--result
これらも[UIImage imageNamed:]を呼び出したときに
のみ機能し
ますが、xib のインスタンス化は機能しません。
助けて、ありがとう