首页 > ios > 用类别修改被扩展类已经实现的方法

用类别修改被扩展类已经实现的方法

  怎么能用类别去覆盖原来已经实现好的方法?这是一个让人思考的问题。在有些情况下继承是是有很多的弊端的,下面给出一个方法。
  移花接木大法
  先写一个方法,然后通过class_getInstanceMethod获取老的method和新的method,然后调用method_exchangeImplementations交换。

#import <objc/objc.h>
#import <objc/runtime.h>
//这两个头文件是不能少的
@interface UIApplication(af)
-(BOOL)swapOpenURL;
- (BOOL)afOpenURL:(NSURL*)url;
@end
@implementation UIApplication(af)
-(BOOL)swapOpenURL
{
    Method oldMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"openURL:"));
    if (!oldMethod)
    {
        return NO;
    }
    Method newMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"afOpenURL:"));
    if (!newMethod)
    {
        return NO;
    }
    method_exchangeImplementations(oldMethod, newMethod);
    return YES;
}
- (BOOL)afOpenURL:(NSURL*)url
{
    NSLog(@"afOpenURL");
    return [self afOpenURL:url];
}
@end
  1. 还没有评论
评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks