iOS基础--一些常用的小知识(二)

清理缓存(具体情况还需要具体调整)

- (void)clearCache
{
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示信息" message:@"是否清理缓存" preferredStyle:UIAlertControllerStyleAlert] ;
            UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil] ;
            UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
            {
                // 拿到缓存路径
            NSString *cachePath = [SandBoxPaths cachePath] ;
                // 缓存路径下的各文件目录
            NSArray *filesArray = [[NSFileManager defaultManager] subpathsAtPath:cachePath] ;
            // 循环遍历各个路径
            for (NSString *path in filesArray)
            {
                NSError *error ;
                // 路径拼接
                NSString *filePath = [cachePath stringByAppendingPathComponent:path] ;
                if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
                {
                    // 如果存在该文件就删除
                    [[NSFileManager defaultManager] removeItemAtPath:filePath error:&error] ;
                }
            }
                [self performSelectorOnMainThread:@selector(clearCacheSuccess) withObject:nil waitUntilDone:YES] ;
            }] ;
            [alertController addAction:cancleAction] ;
            [alertController addAction:okAction] ;
            [self.navigationController presentViewController:alertController animated:YES completion:nil] ;

}

// 提示清除缓存成功
- (void)clearCacheSuccess
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"清除缓存成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil] ;
    [alertView show] ;
}

计算缓存文件夹下缓存的大小.

//遍历文件夹获得文件夹大小,返回多少M
- (float ) folderSizeAtPath:(NSString*) folderPath{
    NSFileManager* manager = [NSFileManager defaultManager];
    if (![manager fileExistsAtPath:folderPath]) return 0;
    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
    NSString* fileName;
    long long folderSize = 0;
    while ((fileName = [childFilesEnumerator nextObject]) != nil){
        NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
        folderSize += [self fileSizeAtPath:fileAbsolutePath];
    }
    return folderSize/(1024.0*1024.0);
}
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
    NSFileManager* manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath:filePath]){
        return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
    }
    return 0;
}

代码延迟执行的方法

方法一(NSObject): [self performSelector:@selector(delayAction :) withObject:@"我5秒之后执行" afterDelay:5] ;
方法二 (GCD): dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"我只能坚持5秒") ;
    });

UIScrollView的常见属性

UIScrollView的属性总结
属性  作用
CGPoint contentOffSet   监控目前滚动的位置
CGSize contentSize  滚动范围的大小
UIEdgeInsets contentInset   视图在scrollView中的位置
id<UIScrollerViewDelegate>delegate  设置协议
BOOL directionalLockEnabled     指定控件是否只能在一个方向上滚动
BOOL bounces    控制控件遇到边框是否反弹
BOOL alwaysBounceVertical   控制垂直方向遇到边框是否反弹
BOOL alwaysBounceHorizontal     控制水平方向遇到边框是否反弹
BOOL pagingEnabled  控制控件是否整页翻动
BOOL scrollEnabled  控制控件是否能滚动
BOOL showsHorizontalScrollIndicator     控制是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator   控制是否显示垂直方向的滚动条
UIEdgeInsets scrollIndicatorInsets  指定滚动条在scrollerView中的位置
UIScrollViewIndicatorStyle  设定滚动条的样式
float decelerationRate  改变scrollerView的减速点位置
BOOL tracking   监控当前目标是否正在被跟踪
BOOL dragging   监控当前目标是否正在被拖拽
BOOL decelerating   监控当前目标是否正在减速
BOOL delaysContentTouches   控制视图是否延时调用开始滚动的方法
BOOL canCancelContentTouches    控制控件是否接触取消touch的事件
float minimumZoomScale  缩小的最小比例
float maximumZoomScale  放大的最大比例
float zoomScale     设置变化比例
BOOL bouncesZoom    控制缩放的时候是否会反弹
BOOL zooming    判断控件的大小是否正在改变
BOOL zoomBouncing   判断是否正在进行缩放反弹
BOOL scrollsToTop   控制控件滚动到顶部

如何装载Storyboard中指定的ViewController?

  首先,需要指定ViewController的ID,和Storyboard ID一致。然后使用下面的代码:
 TabBarController *tabBarController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"TabBarController"];

一句话实现系统的打电话功能.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]];

检测网络变化

首先,导入#import "Reachability.h"
其次,添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    Reachability *hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
    [hostReach startNotifier];

 观察者的回调实现:如果没有网络,跳到系统网络设置处
- (void)reachabilityChanged:(NSNotification *)note
{
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];
    switch (status)
    {
        case ReachableViaWiFi:
            // NSLog(@"====当前网络状态为Wifi=======");
            break;
        case ReachableViaWWAN:
            // NSLog(@"====当前网络状态为蜂窝=======");
            break;
            
        default:
            // NSLog(@"你是外星来的吗?");
            //警示框
        {
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"当前无网络,请检查!" preferredStyle:UIAlertControllerStyleAlert];
            //添加一个取消按钮
            UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action)
            {
                [self exitApplication] ;
            }] ;
            //添加一个确定按钮
            UIAlertAction *OKAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action)
            {
                NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
                if ([[UIApplication sharedApplication] canOpenURL:url])
                {
                    [[UIApplication sharedApplication] openURL:url];
                }
            }];
            //将创建好的action添加到警示框视图控制器上
            [alertController addAction:cancleAction] ;
            [alertController addAction:OKAction];
            [self presentViewController:alertController animated:YES completion:^{
                
            }];
            break;
        }
    }
}

// 关闭app的动画
- (void)exitApplication {
    [UIView beginAnimations:@"exitApplication" context:nil];
    [UIView setAnimationDuration:1];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:NO];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
    self.view.bounds = CGRectMake(0, 0, 0, 0);
    [UIView commitAnimations];
}
// 关闭app
- (void)animationFinished:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    if ([animationID compare:@"exitApplication"] == 0) {
        exit(0);
    }
}

coreData版本更新迭代时,需要在中if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]){} 把options后边的nil换成自定义的字典options,如下:

NSDictionary *options = @{NSInferMappingModelAutomaticallyOption:@"YES",NSMigratePersistentStoresAutomaticallyOption:@"YES"} ;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容