2013-05-29 4 views
6

Я стараюсь использовать метод swizzling для ловли «alloc» для NSObject generic.Метод swizzling для «alloc»?

NSObject *obj = [[NSObject alloc] init]; 
UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; 
NSString *str = [[NSString alloc] init]; 
[...] 

Это реализация (категория .м), что работает на всех других методов, за исключением Alloc на NSObjet.

В чем может быть причина?

#import "NSObject+Custom.h" 
#import <objc/runtime.h> 

@implementation NSObject (Custom) 

+ (void)load 
{ 
    Method original = class_getInstanceMethod(self, @selector(alloc)); 
    Method swizzle = class_getInstanceMethod(self, @selector(allocCustom)); 
    method_exchangeImplementations(original, swizzle); 
} 

- (id)allocCustom 
{ 
    NSLog(@"%s", __FUNCTION__); // no way 
    return [self allocCustom]; 
} 

@end 

спасибо.

ответ

8

+alloc является методом класса, а не метод экземпляра:

  • Использование class_getClassMethod вместо class_getInstanceMethod
  • +allocCustom вместо -allocCustom
+0

правильный. Очевидно, что это классный метод! .. невнимание, спасибо! – elp

Смежные вопросы