• iOS开发-面试总结(四)


    IOS开发基础知识

    1:Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)

    复制代码
    对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。
    
    判断对象类型
    
    -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例
    
    -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例
    
    实例一:
    
       Person *person = [[Person alloc] init];      //父类
       Teacher *teacher = [[Teacher alloc] init];  //子类
         
       //YES   
       if ([teacher isMemberOfClass:[Teacher class]]) {  
            NSLog(@"teacher Teacher类的成员");  
       }  
       //NO   
       if ([teacher isMemberOfClass:[Person class]]) {  
           NSLog(@"teacher Person类的成员");  
       }  
       //NO   
       if ([teacher isMemberOfClass:[NSObject class]]) {  
           NSLog(@"teacher NSObject类的成员");  
       }  
    
    实例二:
    
    Person *person = [[Person alloc] init];  
    Teacher *teacher = [[Teacher alloc] init];  
      
    //YES   
    if ([teacher isKindOfClass:[Teacher class]]) {  
        NSLog(@"teacher 是 Teacher类或Teacher的子类");  
    }  
    //YES   
    if ([teacher isKindOfClass:[Person class]]) {  
        NSLog(@"teacher 是 Person类或Person的子类");  
    }  
    //YES   
    if ([teacher isKindOfClass:[NSObject class]]) {  
        NSLog(@"teacher 是 NSObject类或NSObject的子类");  
    }  
    
    isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管,所以isMemberOfClass指到父类时才会为NO;
    
    对方法进行判断:
    
    -(BOOL) respondsToSelector: selector 判读实例是否有这样方法
    
    +(BOOL) instancesRespondToSelector:  判断类是否有这个方法。此方法是类方法,不能用在类的对象
    
    实例三:
    
    // YES   teacher是对象
    if ( [teacher respondsToSelector: @selector( setName: )] == YES ) {  
        NSLog(@"teacher responds to setSize: method" );  
    } 
    
    // YES   Teacher是类
    if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) {  
        NSLog(@"Teacher instance responds to teach method");  
    }  
    复制代码

    2:IOS 开发中判断字符串是否为空字符的方法

    复制代码
    - (BOOL) isBlankString:(NSString *)string {
        if (string == nil || string == NULL) {
            return YES;
        }
        if ([string isKindOfClass:[NSNull class]]) {
            return YES;
        }
        if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
            return YES;
        }
        return NO;
    } 
    复制代码

    3:删除Caches文件夹的内容

    // 文件管理者
    NSFileManager *mgr = [NSFileManager defaultManager];
    // 缓存路径
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    [mgr removeItemAtPath:caches error:nil];

    4:计算某个文件夹或文件的大小

    复制代码
    /**
     *  @ 15-06-17 09:06:22
     *
     *  @brief  计算文件或文件夹的大小 因为osx 文件夹是没有大小这个属性 要通过各个文件计算得到 subpathsAtPath可以获得文件夹下面所有的文件 包含子文件夹里面
     *  @param filePath 比如缓存caches的路径
     *  @return 大小
     */
    - (NSInteger)fileSize:(NSString *)filePath
    {
        NSFileManager *mgr = [NSFileManager defaultManager];
        // 判断是否为文件
        BOOL dir = NO;
        BOOL exists = [mgr fileExistsAtPath:filePath isDirectory:&dir];
        // 文件文件夹不存在
        if (exists == NO) return 0;
        
        if (dir) { // self是一个文件夹
            // 遍历caches里面的所有内容 --- 直接和间接内容
            NSArray *subpaths = [mgr subpathsAtPath:filePath];
            NSInteger totalByteSize = 0;
            for (NSString *subpath in subpaths) {
                // 获得全路径
                NSString *fullSubpath = [filePath stringByAppendingPathComponent:subpath];
                // 判断是否为文件
                BOOL dir = NO;
                [mgr fileExistsAtPath:fullSubpath isDirectory:&dir];
                if (dir == NO) { // 文件
                    totalByteSize += [[mgr attributesOfItemAtPath:fullSubpath error:nil][NSFileSize] integerValue];
                }
            }
            return totalByteSize;
        } else { // 是一个文件
            return [[mgr attributesOfItemAtPath:filePath error:nil][NSFileSize] integerValue];
        }
    }
    
    调用传入下面的路径:
    
    NSFileManager *mgr = [NSFileManager defaultManager];
    // 缓存路径
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
    复制代码

    5:文件操作(NSFileManager)iOS (转)

    复制代码
    iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像android,没有SD 卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件 夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。
    
    Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
    Library:存储程序的默认设置或其它状态信息;
    
    Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。
    
    tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。
    
    
    a:获取应用沙盒根路径:
    
    -(void)dirHome{  
        NSString *dirHome=NSHomeDirectory();      
        NSLog(@"app_home: %@",dirHome);  
    } 
    
    b:获取Documents目录路径:
     
    -(NSString *)dirDoc{  
        //[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];  
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
        NSString *documentsDirectory = [paths objectAtIndex:0];  
        NSLog(@"app_home_doc: %@",documentsDirectory);  
        return documentsDirectory;  
    }  
    
    c:获取Library目录路径:
    
    -(void)dirLib{  
        //[NSHomeDirectory() stringByAppendingPathComponent:@"Library"];  
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
        NSString *libraryDirectory = [paths objectAtIndex:0];  
        NSLog(@"app_home_lib: %@",libraryDirectory);  
    }  
    
    d:获取Cache目录路径:
    
    -(void)dirCache{  
        NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
        NSString *cachePath = [cacPath objectAtIndex:0];  
        NSLog(@"app_home_lib_cache: %@",cachePath);  
    } 
    
    e:获取Tmp目录路径:
    
    -(void)dirTmp{  
        //[NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];  
        NSString *tmpDirectory = NSTemporaryDirectory();  
        NSLog(@"app_home_tmp: %@",tmpDirectory);  
    }  
    
    f:创建文件夹:
    
    -(void *)createDir{  
        NSString *documentsPath =[self dirDoc];  
        NSFileManager *fileManager = [NSFileManager defaultManager];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        // 创建目录  
        BOOL res=[fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil];  
        if (res) {  
            NSLog(@"文件夹创建成功");  
        }else  
            NSLog(@"文件夹创建失败");  
     } 
    
    g:创建文件
    
    -(void *)createFile{  
        NSString *documentsPath =[self dirDoc];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        NSFileManager *fileManager = [NSFileManager defaultManager];  
        NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
        BOOL res=[fileManager createFileAtPath:testPath contents:nil attributes:nil];  
        if (res) {  
            NSLog(@"文件创建成功: %@" ,testPath);  
        }else  
            NSLog(@"文件创建失败");  
    } 
    
    h:写数据到文件:
    
    -(void)writeFile{  
        NSString *documentsPath =[self dirDoc];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
        NSString *content=@"测试写入内容!";  
        BOOL res=[content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];  
        if (res) {  
            NSLog(@"文件写入成功");  
        }else  
            NSLog(@"文件写入失败");  
    }  
    
    i:读文件数据:
    
    -(void)readFile{  
        NSString *documentsPath =[self dirDoc];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
    //    NSData *data = [NSData dataWithContentsOfFile:testPath];  
    //    NSLog(@"文件读取成功: %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);  
        NSString *content=[NSString stringWithContentsOfFile:testPath encoding:NSUTF8StringEncoding error:nil];  
        NSLog(@"文件读取成功: %@",content);  
    }  
    
    j:文件属性:
    
    -(void)fileAttriutes{  
        NSString *documentsPath =[self dirDoc];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        NSFileManager *fileManager = [NSFileManager defaultManager];  
        NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];  
        NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:testPath error:nil];     
        NSArray *keys;  
        id key, value;  
        keys = [fileAttributes allKeys];  
        int count = [keys count];  
        for (int i = 0; i < count; i++)  
        {  
            key = [keys objectAtIndex: i];  
            value = [fileAttributes objectForKey: key];  
            NSLog (@"Key: %@ for value: %@", key, value);  
        }  
    }  
    
    k:删除文件:
    
    -(void)deleteFile{  
        NSString *documentsPath =[self dirDoc];  
        NSString *testDirectory = [documentsPath stringByAppendingPathComponent:@"test"];  
        NSFileManager *fileManager = [NSFileManager defaultManager];  
        NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test.txt"];     
        BOOL res=[fileManager removeItemAtPath:testPath error:nil];  
        if (res) {  
            NSLog(@"文件删除成功");  
        }else  
            NSLog(@"文件删除失败");     
        NSLog(@"文件是否存在: %@",[fileManager isExecutableFileAtPath:testPath]?@"YES":@"NO");  
    }  
    复制代码
  • 相关阅读:
    BZOJ 1036 树的统计
    codevs 4712 gcd与lcm问题
    codevs 1574 矩阵乘法
    Python定时任务框架APScheduler
    PHP集成支付宝快速实现充值功能
    玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)
    玩转Web之easyui(一)-----easy ui datagird 分页
    Android访问服务器(TOMCAT)乱码引发的问题
    工厂方法模式--结合具体例子学习工厂方法模式
    简单工厂模式--结合实例学习简单工厂模式
  • 原文地址:https://www.cnblogs.com/stronger-ios-lcx/p/5629867.html
Copyright © 2020-2023  润新知