此方法copy自MJRefresh的demo
給UIViewController創(chuàng)建一個分類Category名Example
.h
#import <UIKit/UIKit.h>
@interface UIViewController (Example)
@end
.m
#import "UIViewController+Example.h"
#import <objc/runtime.h>
@implementation UIViewController (Example)
#pragma mark - swizzle
+ (void)load
{
Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"dealloc"));
Method method2 = class_getInstanceMethod([self class], @selector(deallocSwizzle));
method_exchangeImplementations(method1, method2);
}
- (void)deallocSwizzle
{
NSLog(@"%@被銷毀了", self);
[self deallocSwizzle];
}
這樣,工程中所有繼承與UIViewController的控制器都會自動打印出NSLog(@"%@被銷毀了", self) 這句信息吝沫。
注意:
.m文件中 - (void)deallocSwizzle{ }中調(diào)用的[self deallocSwizzle];其實是調(diào)用的[self dealloc]; 因為在+ (void)load{} 方法中已經(jīng)交換了dealloc和deallocSwizzle方法的實現(xiàn)呻澜。
千萬別忘了在其中調(diào)用[self deallocSwizzle], 不然會有問題。(相當于調(diào)用原始的dealloc方法)