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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage