Skip to content

Commit

Permalink
1.1.2
Browse files Browse the repository at this point in the history
修复一处继承链关系判断问题
  • Loading branch information
yulingtianxia committed Mar 22, 2018
1 parent 2e0d316 commit e3af99b
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 16 deletions.
2 changes: 1 addition & 1 deletion MTDemo/MTDemo/ViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ - (void)viewDidLoad {
// 跟上面的用法等价
[self.stub mt_limitSelector:@selector(foo:) oncePerDuration:0.5 usingMode:MTPerformModeDebounce onMessageQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
NSArray<MTRule *> *rules = self.stub.mt_allRules;
self.stub = nil;
// self.stub = nil;

for (MTRule *rule in rules) {
NSLog(@"%@", rule);
Expand Down
2 changes: 1 addition & 1 deletion MessageThrottle.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "MessageThrottle"
s.version = "1.1.1"
s.version = "1.1.2"
s.summary = "A lightweight Objective-C message throttle and debounce library."
s.description = <<-DESC
MessageThrottle is a lightweight, simple library for controlling frequency of forwarding Objective-C messages. You can choose to control existing methods per instance or per class. It's an implementation of function throttle/debounce developed with Objective-C runtime.
Expand Down
28 changes: 14 additions & 14 deletions MessageThrottle/MessageThrottle.m
Original file line number Diff line number Diff line change
Expand Up @@ -141,14 +141,14 @@ - (BOOL)applyRule:(MTRule *)rule
__block BOOL shouldApply = YES;
if (mt_checkRuleValid(rule)) {
[self.rules enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, MTRule * _Nonnull obj, BOOL * _Nonnull stop) {
if (sel_isEqual(rule.selector, obj.selector)
&& mt_object_isClass(rule.target)
&& mt_object_isClass(obj.target)) {
Class clsA = rule.target;
Class clsB = obj.target;
if (sel_isEqual(rule.selector, obj.selector)) {

Class clsA = mt_classOfTarget(rule.target);
Class clsB = mt_classOfTarget(obj.target);

shouldApply = !([clsA isSubclassOfClass:clsB] || [clsB isSubclassOfClass:clsA]);
*stop = shouldApply;
NSCAssert(NO, @"Error: %@ already apply rule in %@. A message can only have one rule per class hierarchy.", NSStringFromSelector(obj.selector), NSStringFromClass(clsB));
NSCAssert(shouldApply, @"Error: %@ already apply rule in %@. A message can only have one rule per class hierarchy.", NSStringFromSelector(obj.selector), NSStringFromClass(clsB));
}
}];

Expand Down Expand Up @@ -205,13 +205,7 @@ static BOOL mt_checkRuleValid(MTRule *rule)
if ([selectorName isEqualToString:@"forwardInvocation:"]) {
return NO;
}
Class cls;
if (mt_object_isClass(rule.target)) {
cls = rule.target;
}
else {
cls = object_getClass(rule.target);
}
Class cls = mt_classOfTarget(rule.target);
NSString *className = NSStringFromClass(cls);
if ([className isEqualToString:@"MTRule"] || [className isEqualToString:@"MTEngine"]) {
return NO;
Expand Down Expand Up @@ -300,7 +294,7 @@ static void mt_forwardInvocation(__unsafe_unretained id assignSlf, SEL selector,

static NSString *const MTForwardInvocationSelectorName = @"__mt_forwardInvocation:";

static void mt_overrideMethod(id target, SEL selector)
static Class mt_classOfTarget(id target)
{
Class cls;
if (mt_object_isClass(target)) {
Expand All @@ -309,6 +303,12 @@ static void mt_overrideMethod(id target, SEL selector)
else {
cls = object_getClass(target);
}
return cls;
}

static void mt_overrideMethod(id target, SEL selector)
{
Class cls = mt_classOfTarget(target);

Method originMethod = class_getInstanceMethod(cls, selector);
if (!originMethod) {
Expand Down

0 comments on commit e3af99b

Please sign in to comment.