首页 > 代码库 > 如何找到根控制起找到根控制器及获得文件夹路径

如何找到根控制起找到根控制器及获得文件夹路径

 // 全局队列 异步下载图片

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"%@", [NSThread currentThread]);

        // 耗时操作: 放在全局队列,异步执行

        // 1. url, 确定一个网络上的资源路径

        NSURL *url = [NSURL URLWithString:@"http://fe.topit.me/e/d1/12/1170068721aa112d1el.jpg"];

        // 2. 通过url可以下载对应的网络资源, 网络资源传输的都是二进制

        NSData *data = http://www.mamicode.com/[NSData dataWithContentsOfURL:url];

        // 3. 二进制转成图片

        UIImage *image = [UIImage imageWithData:data];

        // 4. 更新UI,在主线程-》 直接把任务添加到主队列,就会在主队列执行

        dispatch_async(dispatch_get_main_queue(), ^{

            self.iconView.image = image;

            NSLog(@"-----%@", [NSThread currentThread]); 

        });

    });

}

 

 

//1.获取plist文件的路径

SString *listPath=[[NSBundle mainBundle] pathForResource:@"textList1.plist" ofType:nil];

//2.字典初始化--根据一个文件初始化字典

NSDictionary *dict=[NSDictionary dictionaryWithContentsOfFile:listPath];

 

/**NSString字符串特性*/

  [[UITabBar appearance] setTintColor:RGBA_COLOR(18, 191, 195, 1.0)];

 

// 过滤掉输入的特色字符串的

NSString *string = [textField.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/* 清除缓存中存储的缓存*/

-(void)didReceiveMemoryWarning{

    [super didReceiveMemoryWarning];

    // 需要在这里做一些内存清理工作,如果不清,会被系统闪退

    // 清理图片的缓存

    [self.imageCache removeAllObjects];

    // 清理操作的缓存

    [self.operationCache  removeAllObjects];

       // 取消下载队列里面的任务

    [self.opQueue cancelAllOperations];

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//显示的创建线程

// 又创建了一个新的线程

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

thread.name = @"线程A"; // 线程

[thread start];

 

//使线程放到可调度线程池,处于就绪状态,等待被cup调用

 

// 隐世线程

[self performSelectorInBackground:@selector(longTimeOperation) withObject:nil];

 

 //隐式的创建方式

 

[self performSelectorInBackground:@selector(run2:) withObject:@"DF"];

 

 // 类方法

[NSThread detachNewThreadSelector:@selector(run2:) toTarget:self withObject:@"Hello"]

 

 // 对象方法

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

/**获得当前机器的版本**/

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    

   if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {

        // 注册推送通知(本地通知/远程通知)

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];

        [application registerUserNotificationSettings:settings];

        // 获取DeviceToken

        [application registerForRemoteNotifications];

    } else {

        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];

    }

    

    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {

        // 写跳转代码即可

    }

    

    return YES;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/*story加载控制*/

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Common" bundle:nil];

CMLaunchAdViewController *adVC = [storyboard instantiateViewControllerWithIdentifier:@"CMLaunchAdViewController"];

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Common" bundle:[NSBundle mainBundle]];

// 如何找到根控制起找到根控制器

UINavigationController *navigationController =(UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;

 

// 先判断上次缓存的二级广告开关值

//全局并发队列

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//主队列: 属于串行队列

dispatch_queue_t mainQueue = dispatch_get_main_queue();

//定时循环执行事件

//dispatch_source_set_timer 方法值得一提的是最后一个参数(leeway),他告诉系统我们需要计时器触发的精准程度。所有的计时器都不会保证100%精准,这个参数用来告诉系统你希望系统保证精准的努力程度。如果你希望一个计时器每5秒触发一次,并且越准越好,那么你传递0为参数。另外,如果是一个周期性任务,比如检查email,那么你会希望每10分钟检查一次,但是不用那么精准。所以你可以传入60,告诉系统60秒的误差是可接受的。他的意义在于降低资源消耗。

 

// 在全局队列里面

_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, globalQueue);

// 设置隔多久执行时间

dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0.0 * NSEC_PER_SEC);

 

// 执行事件

dispatch_source_set_event_handler(_timer, ^{ //计时器事件处理器

    DLog(@"Event Handler");

    if (timeout <= 0) {

        //

        dispatch_source_cancel(_timer); //取消定时循环计时器;使得句柄被调用,即事件被执行

        // 主队列异步执行

        dispatch_async(mainQueue, ^{

            if (![CMAdManager shareInstance].launchAdClicked) {

                if (!self.skipButton.selected) {

                    [self skipAction:self.skipButton];

                }

            }

        });

    } else {

        NSString *strTime = [NSString stringWithFormat:@"%d S跳过", timeout];

        

        // 在主队列里面执行

        dispatch_async(mainQueue, ^{

            [self.skipButton setTitle:strTime forState:UIControlStateNormal];

        });

        timeout--;

    }

});

 

dispatch_source_set_cancel_handler(_timer, ^{ //计时器取消处理器;调用 dispatch_source_cancel 时执行

    DLog(@"Cancel Handler");

});

 

// 开启定时器

dispatch_resume(_timer);

//恢复定时循环计时器;Dispatch Source 创建完后默认状态是挂起的,需要主动恢复,否则事件不会被传递,也不会被执行

 

///////////////////////////////////////////////////////////////////////////////////////

 

/*数组便利*/

[self.adList enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

    CMAdObject *adObj = (CMAdObject *)obj;

    if ([adObj.imageUrl isEqualToString:object.imageUrl])

    {

        sameImg = YES;

    }

}];

 

 

/*USerDefalut*/

[userDefaults setObject:ad.Adid forKey:kLaunchAdID];

[userDefaults synchronize];

///////////////////////////////////////////////////////////////////////////////////////

// 总大小

unsigned long long size = 0;

 

// 获得缓存文件夹路径

NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;

// 文件管理者

NSFileManager *fileManager = [NSFileManager defaultManager];

 

// 包含的文件数

NSLog(@"%@", [mgr contentsOfDirectoryAtPath:cachesPath error:nil]);

 

// 子文件夹                                            是component

NSString *dirpath = [cachesPath stringByAppendingPathComponent:@"Mp3/MySister"];

 

// 子文件夹包含的文件数

NSLog(@"%@", [fileManage contentsOfDirectoryAtPath:dirpath error:nil]);

 

// 获得文件夹的属性

// 文件的创建时间、大小、位置

NSDictionary *dict = [mgr attributesOfItemAtPath:dirpath error:nil];

NSLog(@"%@",dict);

 

size = [mgr attributesOfItemAtPath:dirpath error:nil].fileSize;

NSLog(@"-------%llu", size);

 

// 打印出所有文件的路径

NSArray *subpaths = [mgr subpathsAtPath:dirpath];

NSLog(@"%@",subpaths);

 

for (NSString *subpath in subpaths) {

    // 所有路径

    NSString *fullSubpath = [dirpath stringByAppendingPathComponent:subpath];

    // 累加文件大小

    size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;

    

    //        NSDictionary *attrs = [mgr attributesOfItemAtPath:fullSubpath error:nil];

    //        size += [attrs[NSFileSize] unsignedIntegerValue];

}

 

NSLog(@"%llu",size);

 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

/* 获取时间 */

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

formatStr = @"YYHHDD"

dateFormatter.dateFormat = formatStr;

NSDate* nowDate=[NSDate date];

 

/*Block 弱引用相关*/

__weak CMAdManager* weakSelf=self;

 

/*单例子*/

+ (instancetype)shareInstance{

    static Manager *sharedInstance;

    static dispatch_once_t prdictate;

    dispatch_once(&prdictate, ^{

        sharedInstance = [[Manager alloc] init];

    });  

    return sharedInstance;

}

/*消息通知*/

[[CMAppDescription sharedInstance] addObserver:self forKeyPath:@"showAdSwitch" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onApplicationWillTerminate:) name:UIApplicationWillTerminateNotification object:nil];

 

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setLoginPage:) name:kSetLoginPageNotification object:nil];

 

如何找到根控制起找到根控制器及获得文件夹路径