码迷,mamicode.com
首页 > 其他好文 > 详细

运行时Runtime演示方法交换

时间:2020-11-12 13:25:34      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:tin   -o   action   exchange   定义   tool   eve   elf   运行   

1、按钮分类

  • 演示给整个工程中的按钮添加点击音效。
  • 写一个分类,重写类的 load方法。
#import "UIButton+CH.h"

#import <objc/runtime.h>

@implementation UIButton (CH)

+ (void)load {
	[super load];

	// 这个是系统原有的方法
	Method oldObjectAtIndex = class_getInstanceMethod([UIButton class], @selector(sendAction:to:forEvent:));
	// 自定义的方法
	Method newObjectAtIndex = class_getInstanceMethod([UIButton class], @selector(custom_sendAction:to:forEvent:));
	// 交换方法
	method_exchangeImplementations(oldObjectAtIndex, newObjectAtIndex);
}

- (void)custom_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
	// 可条件选择走系统方法
	[self custom_sendAction:action to:target forEvent:event];

	[CHTool playSoundEffect:@"music3" withType:VoiceTypeIsMp3];

	CHLog(@"捕捉所有按钮事件");
}

@end
  • 要使在整个工程中生效,将该分类的头文件添加到工程的Pch文件即可。

2、记录NSMutableArray添加的每一个对象

#import  <objc/runtime.h>

@implementation NSMutableArray (LoggingAddObject)

+ (void)load {
	Method addobject    = class_getInstanceMethod(self, @selector(addObject:));
	Method logAddobject = class_getInstanceMethod(self, @selector(logAddObject:));
	method_exchangeImplementations(addObject, logAddObject);
}

- (void)logAddObject:(id)aobject {
	[self logAddObject:aObject];
	NSLog(@"Added object %@ to array %@", aObject, self);
}
@end
  • 要使在整个工程中生效,将该分类的头文件添加到工程的Pch文件即可。

运行时Runtime演示方法交换

标签:tin   -o   action   exchange   定义   tool   eve   elf   运行   

原文地址:https://www.cnblogs.com/CH520/p/13794728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!