[黑马IOS自学第十四篇]Foundation框架学习

本文主要介绍了iOS开发中的Foundation框架,讲解了位枚举、常用函数、NSArray和NSMutableArray的区别与使用,以及NSString、NSDictionary的基本操作。还涉及到了NSURL、NSFileManager的功能,探讨了iOS的沙盒机制和偏好设置文件。同时,提到了结构体的复制行为以及Objective-C中的copy概念。文章以实际代码示例辅助理解,帮助开发者更好地掌握Foundation框架。
摘要由CSDN通过智能技术生成

框架:由许多类,方法,函数和文档按照一定逻辑组织起来的集合

不小心修改了系统的文件,引起的错误

计算机生成了可选文字:* 用 父 类 还 是 id 〈 协 议 > 不 使 用 父 类 的 原 因 : 如 果 抽 象 一 个 父 类 的 话 , 还 是 有 局 限 性 , 因 为 很 多 时 候 , 不 同 类 是 无 法 抽 象 出 共 同 的 父 类 的 · 有 时 候 , 某 个 类 己 经 继 承 了 其 他 类 , 这 里 不 能 再 继 承 类 了 ( 因 为 不 支 持 多 鰷 承 )

#import<Foundation/Foundation.h>
 
int main(intargc,const char* argv[]) {
    @autoreleasepool {
      
    NSString *str1 = @"abc";
    NSString *str2 = @"Abc";
    NSString *str4 = @"Abc";
    NSString *str3 = [NSString stringWithFormat:@"abc"];
    //str3在堆区,而str1,str2在常量区
    //所以 ==不能判断字符串是否相等
       
        //不是类变量前不用加 *
        //NSComparisonResult 是一个枚举类型
        //compare 默认区分大小写
        //NSComparisonResultresult  =[str1 compare:str2 ];
        //如果要区分大小写
         NSComparisonResultresult  =[str1 compare:str2options:NSCaseInsensitiveSearch|NSNumericSearch];
       switch (result) {
            case NSOrderedAscending:
              NSLog(@"str1 < str2升序");
               break;
            case NSOrderedDescending:
              NSLog(@"str1 > str2降序");
               break;
           case NSOrderedSame:
              NSLog(@"str1 == str2相等");
               break;
               
           default:
               break;
       }
       
        //常量字符串,在常量区只有一份,地址一定是一样的
       if(str2 == str4){
          NSLog(@"相等");
       }
       else{
          NSLog(@"不相等");
       }
       
       
        //isEqualToString区分大小写的
       
       if( [str2 isEqualToString:str4]){
          NSLog(@"相等");
       }
       else{
          NSLog(@"不相等");
       }
    }
    return 0;
}

位枚举

常用的三个函数

计算机生成了可选文字:NSCaseInsensitiveSearch : 不 区 分 大 小 写 字 符 , NSLiteralSearch: 行 完 全 比 较 , 区 分 大 小 写 , ( 默 认 ) № mericSearch: 比 较 字 符 串 的 字 符 个 数 , 而 不 是 字 符 值 ·

计算机生成了可选文字:typedef NS_OPTIONS (NSUInteger, NSStringCompareOptions) NSCaseInsensitiveSearch NSLitera ISea rch equivalence NSBackwardsSearch 4, NSAncho red Sea rch 1, Exact character—by—character Search from end of source string Search is limited to start (or end, if NSBackwardsSearch) of source string NSNumericSea rch Added in 1ø.2; Numbers within strings 64, are compared using numeric value, that is, F002.txt F007. txt F0025. txt; only applies to compare methods, not find NSDiacritic1nsensitiveSearch 2_Ø) If 128, specified, ignores diacritics (o—umlaut o) NSWidth1nsensitiveSearch 2_Ø) If 256, specified, ignores width differences ( 'a' UFF41) NSForcedOrderingSearch 2_Ø) 512, If specified, comparisons are forced to return either NSOrderedAscending or NSOrderedDescending if the strings are equivalent but not strictly equal, for stability when sorting (e g "aaa" "AAA" with NSCaseInsensitiveSearch specified) NSRegu1arExpressionSearch 3_2) - 1Ø24 Applies to rangeOfString:... , stringByReplacingOccurrencesOfString: , and replaceOccurrencesOfString: ... methods only; the treated as an ICU—compatible regular expression; ootions can aoolv exceot NSCaseInsensitiveSearch search string is if set, no other and

#import<Foundation/Foundation.h>
//检测字符串的前缀和后缀
void qianzhuihouzhui( )
{
    NSString *url = @"http://www.baidu.com";
    
    if ([url hasPrefix:@"https://"]|[urlhasPrefix:@"http://"]){
        NSLog(@"http或者https协议网站");
    }
    else
    {
        NSLog(@"不是一个http协议网址");
    }
    
    
    if( [url hasSuffix:@".com"]){
        NSLog(@".com结尾网站");
    }
    else{
        NSLog(@"不是.com结尾网站");
    }
    
 
}
int main(intargc,const char* argv[]) {
    @autoreleasepool {
     
       
        //字符串的查找某个字符串在另一个字符串首次出现的位置
        NSString*str1 =@"sdsaiosaaaiosbbbb";//字符串中有两个ios
       NSString *str2 = @"ioss";
       
       NSRange range = [str1 rangeOfString:str2];
       
        //range.length 字符串的长度
        //range.location 字符串首次出现的位置如果查找不到会返回一个特别大的数字
       if (range.location!=NSNotFound) {
           NSLog(@"%lu,%lu",range.length,range.location);
 
       }
       else{
          NSLog(@"没有在%@中查找到%@",str1,str2);
       }
               
       
    }
         return 0;
}


NSRange是一个结构体变量

#import<Foundation/Foundation.h>
 
int main(intargc,const char* argv[]) {
    @autoreleasepool {
       NSRange range ;//结构体变量
       NSRange *r ;//结构体指针
       
        //第一种赋值方法
       range.location = 3 ;
       range.length = 3 ;
       
        //结构体整体变量赋值
       range = (NSRange){3,3};
       
       //3)
       NSRange r3 = {.location = 3};//此时length没有赋初始值
       
        //4) oc新增
       NSRange r4 = NSMakeRange(3,3);
        //loca, len
       
       
        //查看结构体变量值
       NSLog(@"%ld,%ld",r4.location,r4.length);
       
       
       
        NSString *str =  NSStringFromRange(r4);
       NSLog(@"%@",str);
       //{3, 3}
 
       r->length = 3;
       r->location = 3;
        //NSLog(@"%ld,%ld",r->location,r->length);

    
    }
    return 0;
}
 
 
//
// main.m
//  NSString字符串的截取
//
// Created by CHINGWEI_MACPC on 15/12/16.
//  Copyright © 2015年 itcast. All rights reserved.
//
 
#import<Foundation/Foundation.h>
void test(){
    NSString *url = @"http://www.baidu.com";
    
    NSString *url1  = [url substringFromIndex:5];
    NSLog(@"url1 =%@",url1);
    //  //www.baidu.com
    
    NSString *str2 = [url substringToIndex:5];
    NSLog(@"str2 =%@",str2);
    //http:
    
    NSRange r1 = {7,13};
    NSString *str3 = [url substringWithRange:r1];
    NSLog(@"str3 =%@",str3);
    //www.baidu.com
}
void test2()
{
    NSString *str =@"<itcast>黑马程序员</itcast>";
    NSUInteger loc  = [str rangeOfString:@">"].location +1 ;
    NSUInteger len = [str rangeOfString:@"</"].location - loc ;
    
    NSRange r2 = {loc,len};
    
    NSString *subStr = [str substringWithRange:r2];
    NSLog(@"%@",subStr);
}
int main(intargc,const char* argv[]) {
    @autoreleasepool {
     
       //字符串替换
        NSString *str = @"dsdsaaasds aasd saaa ";
        NSString *str2 = [str stringByReplacingOccurrencesOfString:@"a"withString:@"*"];
       NSLog(@"替换后的字符串为:%@",str2);
       NSRange r2 = {0,1};
        NSString *str3 = [str stringByReplacingCharactersInRange:r2withString:@""];
       NSUInteger len = [str3 length];
       NSRange r3 = {len-1,1};
        str3 = [str3 stringByReplacingCharactersInRange:r3 withString:@""];
        NSLog(@"str3去掉空格后为 \"%@\"",str3);
        //替换后的字符串为:dsds***sds**sds***
 
 
 NSString *s1 =@"dsdsaaasds aasd saaa ";
        str3 = [s1 stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceCharacterSet]];
        NSLog(@"老师方法去掉收尾空格后 \"%@\"",str3);
 
    }
    return 0;
}
 
void test(){
    NSString *str1 = @"150";
    NSString *str2 = @"100";
    
    
    //强制类型转换
    
    int num1 = [str1 intValue];
    int num2 = [str2 intValue];
    
    int minus = num1 - num2 ;
    
}
int main(intargc,const char* argv[]) {
    @autoreleasepool {
    //oc和 c语言字符串互换
 
    //1)c -->oc 对象
    char *s = "zs";
    NSString *str = [NSString stringWithUTF8String:s];
       NSLog(@"%@",str);
       
        //2oc--->c
       NSString *str2 = @"zbz";
        ///Users/chingwei_macpc/Documents/Foundation框架/字符串和其他数据类型转换/main.m:34:17:Initializing 'char *' with an expression of type 'const char * _Nullable'discards qualifiers
       const  char*s1 = [str2 UTF8String] ;
       printf("%s\n",s1);
       
       
       
    }
    return 0;
}

计算机生成了可选文字:NSMutab1eString 类 *XNSString 类 , 那 么 NSString 提 供 的 方 法 在 、 S № tableString 中 基 本 都 可 以 使 用 , NSMutableString 好 比 一 个 字 符 率链袤, 它 可 以 任 意 的 动 态 在 字 符 率 中 添 加 字 符 率 除 字 符 率 指 定 位 置 插 入 字 符 率 , 使 用 它 来 操 作 字 符 率 会 更 加 灵 活 , NSMutableString 和 NSString 的 区 别 Stri 是 不 可 变 的 , 里 面 的 文 字 内 容 是 不 能 进 行 彆 改 的 NSMutableString 是 可 变 的 , 里 面 的 文 字 内 容 可 以 时 更 改 NSMutableString 能 使 用 NSString 的 所 有 方 法

 

计算机生成了可选文字:不 可 变 : 指 的 是 字 符 率 在 内 存 中 占 用 的 存 储 空 何 固 定 , 并 且 存 储 的 内 容 不 能 发 生 变 化 可 变 : 指 的 是 字 符 率 在 内 存 中 占 用 的 存 储 空 间 可 以 不 固 定 , 并 且 存 储 的 内 容 可 以 被 彆 改

#import<Foundation/Foundation.h>
 
int main(intargc,const char* argv[]) {
    @autoreleasepool {
        //int a a 是存在栈区
        NSString*str2=@"jack";//NSString 是在常量区不可变
       NSLog(@"str2=%p",str2 );
        //str2=0x100001048
        str2=@"rose";//NSString 是在常量区不可变
        NSLog(@"str2=%p",str2 );
        //str2=0x100001088
        //同一个变量地址不一样常量一样就存在一个内存区
        //字符串所占的空间和字符串都不能改变
       
       
        //[NSMutableString stringWithFormat:@"jack"]存入堆区
        //字符串在内存占用的空间是不固定,并且存储内容可以被修改
        NSMutableString *str1 = [NSMutableStringstringWithFormat:@"jack"];
       
       NSLog(@"str1=%p",str1);
        //str1=0x100204290
       
       [str1 appendFormat:@"rose"];//格式化添加       
        NSLog(@"%@=%p",str1,str1);
        //str1=0x100204290
       
       
        NSMutableString *s2 =[NSMutableString string];
       NSString *s3=@"itcast";
       for (inti = 0; i<10; i++) {
           [s2 appendString:s3];
       }
       NSLog(@"%@",s2);
       
       
    }
    return 0;
}
 
 
 
#import<Foundation/Foundation.h>
 
int main(intargc,const char* argv[]) {
    @autoreleasepool {
    
        //append格式化添加字符串
        NSMutableString *str = [NSMutableStringstring];
        [str appendFormat:@"http://www.baidu.com"];
       NSLog(@"%@",str);
    
        //因为是可变的不需要void返回值
       
        //删除字符串的某一个范围
        [str deleteCharactersInRange:NSMakeRange(5, 2)];
       NSLog(@"%@",str);
        //http:www.baidu.com
       
        //插入一个字符串
       [str insertString:@"\\\\" atIndex:5];
       NSLog(@"%@",str);
       
        //替换字符串的一部分内容
        [str replaceCharactersInRange:NSMakeRange(11, 5)withString:@"itcast"];
       NSLog(@"%@",str);
        //http:\\www.itcast.com
       
       
       //易犯错误
        //1)@"sd"是NSString
       NSMutableString *test = @"sd";
        ///Users/chingwei_macpc/Documents/Foundation框架/NSMutableString常用方法/main.m:37:26: Incompatible pointertypes initializing 'NSMutableString *' with an expression of type 'NSString *'
       NSLog(@"%@",test);
       //[test appendFormat:@"asd"];
        //给常量值赋值报错
      
       //2).
        NSMutableString *test1 =[NSMutableStringstring];
       str.string =@"";//用空覆盖
       [str appendFormat:@"xxxxxx"];
       NSLog(@"%@",test1);
       //输出为空
       
       
        //3).到底用NSMutableString还是NSString
        //特殊处理的时候字符串拼接,替换等才用到NSMUtableString
    
    }
    return 0;
}

位枚举

计算机生成了可选文字:4) Mfr. typedef (NSUInteger, NSStringCompareOpti NSCaseInsensitiveSearch NSLiteraISearch 2, NSBackwardsSearch 4, NSAnchoredSearch Exact character * earch from end Search is limit NS3ackwa rdssearch) Of source string NSNumericSearch 64, Added in 1Ø.2; compared using numeric value, that is, Foo only applies to compare methods, not find NSDiacriticInsensitiveSearch NS_ENUM_AVAILABLE specified, ignores diacritics (o—umlaut — NSString g" " " options:0 5) J' NSRange range (sl range0fString:@ o if (range. location NSNotFound) ( range, location, range, length) , ) else ( NSLog length

 

NSArray

OC中数组类,C语言只能存放一种类型数据,不能很方便的动态添加数组元素,不能方便动态的删除数组元素(长度固定)

NSArray只能存放任意oc对象,并且顺序的,不能存储非oc对象

比如int/float/double/char/enum/struct

一旦初始化完毕,它里面的内容永远固定的

 
#import<Foundation/Foundation.h>
 
int main(intargc,const char* argv[]) {
    @autoreleasepool {
      
       
        //创建一个空数组
       NSArray *arr1 =[NSArray array];
       
       
        //创建一个数组,只有元素;
        NSArray * arr2 =[NSArray arrayWithObject:@"1"];
       
        //创建数组,有多个元素常见写法
        NSArray *arr3 = [NSArray arrayWithObjects:@"1",@"2",@"3",@4,nil];
       
        //调用对象方法创建数组 nil表示赋值结束,但不存储nil
        NSArray *arr4 = [[NSArray alloc] initWithObjects:@"1",[NSNullnull],@"2",@"3",nil];
       
        //用一个数组可以创建另外一个数组
        NSArray *arr5 = [NSArray arrayWithArray:arr3];
       
    }
    return 0;
}

NSArray常见用法

void test(){
    NSArray *arr =[NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    
    //获得数组长度
    NSLog(@"%ld",arr.count);//3
    
    //获取下标对应的对象
    NSLog(@"%@",[arr objectAtIndex:2]);
    
    //返回元素下标
    NSUInteger loc = [arr indexOfObject:@"2"];
    NSLog(@"%ld",loc);
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值