一般写initWithFrame:如下
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame]) {
// do something ...
}
return self;
}
在网上看到经常有人进行这样的method swizzling,代码如下:
- (id)swizzled_initWithFrame:(CGRect)frame
{
// This is the confusing part (article explains this line).
id result = [self swizzled_initWithFrame:frame];
// Safe guard: do we have an UIView (or something that has a layer)?
if ([result respondsToSelector:@selector(layer)]) {
// Get layer for this view.
CALayer *layer = [result layer];
// Set border on layer.
layer.borderWidth = 2;
layer.borderColor = [[UIColor redColor] CGColor];
}
// Return the modified view.
return result;
}
+ (void)load
{
Method original, swizzle;
// Get the "- (id)initWithFrame:" method.
original = class_getInstanceMethod(self, @selector(initWithFrame:));
// Get the "- (id)swizzled_initWithFrame:" method.
swizzle = class_getInstanceMethod(self, @selector(swizzled_initWithFrame:));
// Swap their implementations.
method_exchangeImplementations(original, swizzle);
}
想问下,swizzled_initWithFrame:这个方法中并没有发送[super initWithFrame]这个消息,那如何保证super initWithFrame了呢?
v2ex上大神多,请轻喷!谢谢:)