/// 打印当前rootVc 所在层级
po [[[UIWindow keyWindow] rootViewController] _prontHierarchy]
/// 1 递归获取子视图
- (void)getSub:(UIView *)view andLevel:(int)level {
NSArray *subviews = [view subviews];
// 如果没有子视图就直接返回
if ([subviews count] == 0) return;
for (UIView *subview in subviews) {
// 根据层级决定前面空格个数,来缩进显示
NSString *blank = @"";
for (int i = 1; i < level; i++) {
blank = [NSString stringWithFormat:@" %@", blank];
}
// 打印子视图类名
NSLog(@"%@%d: %@", blank, level, subview.class);
// 递归获取此视图的子视图
[self getSub:subview andLevel:(level + 1)];
}
}
- (void)getSubVC:(UIViewController *)vc andLevel:(int)level {
if ([vc isKindOfClass:[UITabBarController class]]) {
NSLog(@"--==-level : %d tabCon : %@---",level,vc.className);
UITabBarController * tabCon = (UITabBarController *)vc;
for (UIViewController * subVc in tabCon.viewControllers) {
[self getSubVC:subVc andLevel:level + 1];
}
}else if ([vc isKindOfClass:[UINavigationController class]]){
NSLog(@"--==-level : %d nav : %@---",level,vc.className);
UINavigationController * nav = (UINavigationController *)vc;
for (UIViewController * subVc in nav.viewControllers) {
[self getSubVC:subVc andLevel:level + 1];
}
}else if ([vc isKindOfClass:[UIViewController class]]){
NSLog(@"--==-level : %d vc : %@---",level,vc.className);
}
}
/// 2 获取某个类的所有子类
- (NSArray *)getAllSubClassNameWithClass:(Class)class {
NSMutableArray *mutArr = [NSMutableArray array];
int list;
Class *tempClass = NULL;
list = objc_getClassList(NULL,0);
if (list > 0) {
NSLog(@"--== list:%d---",list);
tempClass = (__unsafe_unretained Class *)malloc(sizeof(Class) * list);
list = objc_getClassList(tempClass, list);
for (int i = 0; i < list; i++) {
NSLog(@"--== sub : %@---",class_getSuperclass(tempClass[i]));
if (class_getSuperclass(tempClass[i]) == class){
[mutArr addObject:NSStringFromClass(tempClass[i])];
NSLog(@"--== cur%@\n", NSStringFromClass(tempClass[i]));
}
}
free(tempClass);
}
return [mutArr copy];
}
///3 获取当前响应者,并取消当前window上 响应者的响应状态
- (void)tapActioDis{
UIWindow *keywindow = [[UIApplication sharedApplication] keyWindow];
id firstResponder = [keywindow performSelector:@selector(firstResponder)];
[firstResponder resignFirstResponder];
}
///4 获取当前VC
+ (UIViewController *)getCurrentVC {
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
return currentVC;
}
+ (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC {
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// 视图是被presented出来的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根视图为UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根视图为UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
// 根视图为非导航类
currentVC = rootVC;
}
return currentVC;
}
//获取文件大小
- (long long)fileSizeAtPath:(NSString *)filePath{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath]){
return 0;
}else{
long long size = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
NSLog(@"--==-size : %lld %@ filePath : %@----",size,[self getBetterUnit:@(size) round:false],[filePath componentsSeparatedByString:@"/"].lastObject);
return size;
}
}
//获取文件夹下所有文件以及文件夹的大小
- (long long)folderAndSubsSizeAtPath:(NSString *)folderPath{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:folderPath]) return 0;
long long folerSize = 0;
NSArray * arrSubName = [fileManager subpathsAtPath:folderPath];
NSLog(@"--==-arrSubName : %@---",arrSubName.modelToJSONString);
for (NSString * subName in arrSubName) {
NSString * path = [folderPath stringByAppendingPathComponent:subName];
folerSize += [self fileSizeAtPath:path];
NSLog(@"--==- folerSize: %lld---",folerSize);
}
return folerSize;
}
网友评论