1. 當接手一個比較大的項目時,利用method Swizzle (方法交換),來快速熟悉項目,從控制臺輸出當前控制器的名稱
- 創建 UIViewcontroller 的一個分類
- 引入頭文件 #import <objc/runtime.h>
- 在load方法中將自定義的logViewWillAppear方法與系統的viewWillAppear 方法進行交換
+ (void)load {
//我們只有在開發的時候才需要查看哪個viewController將出現
//所以在release模式下就沒必要進行方法的交換
#ifdef DEBUG
//原本的viewWillAppear方法
Method viewDidAppear = class_getInstanceMethod(self, @selector(viewDidAppear:));
//需要替換成 能夠輸出日志的viewWillAppear
Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:));
//兩方法進行交換
method_exchangeImplementations(viewDidAppear, logViewWillAppear);
#endif
}
- (void)logViewWillAppear:(BOOL)animated {
NSString *className = NSStringFromClass([self class]);
//在這里,你可以進行過濾操作,指定哪些viewController需要打印,哪些不需要打印
// if ([className hasPrefix:@"UI"] == NO) {
// NSLog(@"%@ will appear",className);
// }
NSLog(@"currentControllerName = %@",className);
//下面方法的調用,其實是調用viewWillAppear
[self logViewWillAppear:animated];
}
2. 利用關聯對象為分類添加屬性
@interface Person (name)
@property(nonatomic,strong)NSString *name;
@end
-(NSString *)name{
return objc_getAssociatedObject(self, @"name");
}
-(void)setName:(NSString *)name{
objc_setAssociatedObject(self, @"name", name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。