Swizzling eine einzelne Instanz, nicht die Klasse

Habe ich eine Kategorie auf NSObject, die angeblich so einige Dinge. Wenn ich es auf ein Objekt, möchte ich überschreiben Sie die dealloc-Methode hinzu, um einige Aufräumarbeiten.

Wollte ich es mit method swizzling, aber konnte nicht herausfinden, wie. Die einzigen Beispiele, die ich gefunden habe sind auf so ersetzen Sie die Implementierung der Methode für die gesamte Klasse (in meinem Fall wäre es dealloc überschreiben für ALLE NSObjects - was ich nicht will).

Möchte ich überschreiben der dealloc-Methode frei von bestimmten Instanzen von NSObject.

@interface NSObject(MyCategory)
-(void)test;
@end

@implementation NSObject(MyCategory)
-(void)newDealloc
{
  //do some cleanup here
  [self dealloc]; //call actual dealloc method
}
-(void)test
{
  IMP orig=[self methodForSelector:@selector(dealloc)];
  IMP repl=[self methodForSelector:@selector(newDealloc)];
  if (...)   //'test' might be called several times, this replacement should happen only on the first call
  {
     method_exchangeImplementations(..., ...);
  }
}
@end
InformationsquelleAutor Gilad Novik | 2012-02-29
Schreibe einen Kommentar