So überschreiben Sie eine Methode in der Framework-Klasse (Laufzeit)
Problem:
Das Framework speichert die Bilddaten wie folgt zwischen:
[UIImage imageNamed:]
Ich möchte nicht, dass das Caching stattfindet, also kann ich es durch ersetzen
[UIImage imageOfContentOfFile:]
Scheint gelöst zu sein, aber nach meinen Tests werden in xibs instantiierten Fortschritten Frameworks verwendetimageNamed: eher, alsimageOfContentOfFile.
Das heißt, von xib geladene Bilder werden immer noch zwischengespeichert.
Also versuche ich, die imageNamed: -Methode des UIImage zu überschreiben.
--try1. Kategorie:
@implementation UIImage (ImageNamedNoCache)
+ (UIImage *)imageNamed:(NSString *)name;
{
NSString* path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
return [UIImage imageWithContentsOfFile:path];
}
@end
--result: warning. "Category implementiert eine Methode, die auch von ihrer Primärklasse implementiert wird."
--try2. Laufzeit ersetzen die Methode 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);
--Ergebnis Auch diese versuchen nur zu funktionieren, wennIch rufe an [UIImage imageNamed:]
Aber die Instanziierung von xib funktioniert nicht.
hilf mir, danke