-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Description
sample project: Aspect_issue.zip
- add a hook for superclass, e.g.
UIViewController
[UIViewController aspect_hookSelector:@selector(viewDidAppear:) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> info) {
NSLog(@"hooked viewDidAppear!");
} error:NULL];
- add a hook for subclass, e.g.
ViewController
id<AspectToken> token = [ViewController aspect_hookSelector:@selector(foo) withOptions:AspectPositionAfter usingBlock:^(id<AspectInfo> info) {
NSLog(@"hooked foo!");
} error:NULL];
- remove the hook of subclass
[token remove];
Then, when ViewController
's [super viewDidAppear:]
is called, it will trigger a doesNotRecognizeSelector
crash.
It is because that when the hook token
is removed from ViewController
, Aspect finds ViewController
has no hooks, so aspect_undoSwizzleForwardInvocation
is called, resetting ViewController
's forwardInvocation
to the original method (which is nil, and Aspect uses NSObject's forwardInvocation
implementation instead ).
Metadata
Metadata
Assignees
Labels
No labels