最简单的IOS

来源:互联网 发布:域名属于知识产权吗 编辑:程序博客网 时间:2024/06/05 08:03

  1.框架:就是系统(苹果)或者第三方(其他的一些高手)事先写好了一些很牛X功能的类.

         把这些类交给我们使用.这些类的集合我们叫做框架.

 

         框架中有很多很多功能相似的类.函数库

 

     Foundation框架1个包这里面有很多类、函数、定义了一些数据类型.

                      这个框架中的类都是一些最基础的类. NSString NSObject

                     其他的框架都是基于Foundation框架的.

 

     UIKit.

     AVFoundation.

     ......

 

 

  2. Foundation框架中的最常用的类.简单的爆.量大.


    

 

  3. NSString

 

     1). NSString1个数据类型.保存OC字符串的.

         NSString的本质是1个类.既然是1个类.

 

         所以,最标准的创建NSString对象的方式:

         NSString *str1 = [NSString new];

         NSString *str2 = [[NSString alloc] init];

         NSString *str3 = [NSString string];

 

        使用这种方式创建的字符串是1个空的字符.  @""

 

         NSString对象就是用来存储字符串.

 

 

     2). NSStringOC中最常用的1个类了.所以OC提供了一种更为快速的创建字符串对象的方式.

         使用前缀@

 

         @"jack"; 本质上这是1NSString对象.这个NSString对象中存储的是"jack"这个字符串.

 


        NSString *str1 = @"rose";

 

        1).  @"rose"本质上是1NSString对象,这个对象中存储的是字符串"rose".

        2).  将这个字符串对象的地址返回赋值给str1指针.

 

 

 

 

        格式控制符%p:打印指针变量的值.打印地址.

                  %@: 打印指针指向的对象.

 

 

  4. NSString的恒定性.

 

     1).当我们使用简要的创建字符串对象的时候.也就是使用1OC字符串常量来初始化字符串指针的时候.

        这个字符串对象是存储在常量区(数据段).

 

         NSString *str = @"jack";

 

         当我们调用NSString的类方法来创建对象的时候.

 

         NSString *str =  [NSString stringWithFormar:@"jack"];

         NSString *str1 = [NSString new];

        创建的字符串对象是存储在堆区.

 

 

     2).当在内存中创建1个字符串对象以后.这个字符串对象的内容就无法更改.

        当我们重新为字符串指针初始化值的时候.并不是修改原来的字符串对象 

        而是重新的创建1个字符串对象将这个字符串对象的地址重新复制给字符串指针变量.

 

 

     3).当系统准备要在内存中创建字符串对象的时候.会先检查内存中是否有相同内容的字符串对象.

        如果有,直接指向.如果没有才会重新创建.

 

 

     4).存储在常量区的数据不会被回收.所以存储在常量区的字符串对象也不会被回收.

 

   5. NSString1个类.那么肯定其中有很多的方法.

 

 

  6.使用频率最最高的几个方法.

 

     1). 使用拼接的方式创建1NSString对象.

 

         + (instancetype)stringWithFormat:(NSString *)format, ... 

 

 

     2). 得到字符串的长度.

         @property (readonly) NSUInteger length;

 

     3).得到字符串中指定下标的字符.

         - (unichar)characterAtIndex:(NSUInteger)index;

 

         返回值是unichar类型的要打印的话使用%C

 

 

     4).判断两个字符串的内容是否相同.

 

         a. 能否使用 ==来判断两个OC字符串的内容是否相同.

 

         b. ==运算符的作用:比较左右两边的数据是否相同.

 

            ->   10 == 10 这个时候直接比较的是左右两边的数据是否相同.

            ->   a == b  两边也可以写1个变量.这个时候比较是左右两边的变量的值是否相同.

            ->  如果两边是1个指针变量.那么比较的也是变量的值.只不过指针变量的值是地址.

 

 

         c.所以,如果我们要比较两个OC字符串的内容是否相同.不能使用 == 去比较.

           因为 ==比较的是字符串指针变量的值.而我们要比的是两个字符串指针指向的字符串对象的内容是否相同.

 

         c. 调用方法

            - (BOOL)isEqualToString:(NSString *)aString;

           就可以比较当前字符串对象和传入的字符串对象的内容是否相同.

 

 

     5).C语言的字符串转换为OC字符串对象.

 

         + (instancetype)stringWithString:(NSString *)string;

 

 

     6).OC字符串对象转换为C语言的字符串.

 

         @property (nullable, readonly) __strong const char *UTF8String


   7.将字符串写入到指定的文件中.

 

     - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

 

 

  8.将文件中的内容读取到字符串中.

     + (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

 

     nullable 代表返回的对象有可能是nil

 

  9. 使用NSURL读写资源.

     

     1). NSURL对象.专门用来保存资源地址的.资源地址:本地磁盘路径、网页地址、ftp文件地址.

 

     2). 资源路径的地址的写法:

         http://   开头的是网页路径的写法.

         file://   开头的是本地磁盘的路径

         ftp://    开头的是ftp文件资源的路径

        如果要讲1个资源路径的地址保存到NSURL对象中地址一定要是标准写法.

 

     3). 如何将资源地址存储到NSURL对象中.

         NSURL *url1 = [NSURL URLWithString:@"http://www.itcast.cn"];

         NSURL *url2 = [NSURL URLWithString:@"ftp://server.itcast.cn/ccc.txt"];

         NSURL *url3 = [NSURL URLWithString:@"file:///Users/Apple/Desktop/abc.txt"];

 

     4).字符串就提供了对应的方法去读写NSURL对象中封装的资源路径

 

 

        从指定资源路径读取文本内容.

         + (nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;

 

        将字符串的内容写入到资源路径中.

         - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

 

        如果要向网页或者ftp写内容要有权限.

 

 

  9. 字符串比较.

     - (NSComparisonResult)compare:(NSString *)string;

 

 

  10.字符串比较:忽略大小写的比较:

 

 

  11.字符串的相等判断.

 

 

         

         

  12.判断字符串是否以指定的字符串开头

     - (BOOL)hasPrefix:(NSString *)str;

 

  13.判断字符串是否以指定的字符串结尾

     - (BOOL)hasSuffix:(NSString *)str;

 

 

  14.在主串中搜索子串.从前往后

 

     - (NSRange)rangeOfString:(NSString *)searchString;

 

     返回值是1NSRange类型的结构体变量.

 

     typedef struct _NSRange {

         NSUInteger location;代表子串在主串出现的下标.

         NSUInteger length;代表子串在主串中匹配的长度.

     } NSRange;

 

     如果没有找到:

     location NSUInteger的最大值,也就是NSNotFound

     length 的值为0

 

 

    这个方法,是从前往后搜索.1次匹配的子串.

 

 

  15.在主串中搜索子串.从后往前.

 

        NSString *str = @"i love itcast love!";

 

        NSRange range =  [str rangeOfString:@"love" options:NSBackwardsSearch];

 

 

 

 16. NSRange结构体.

 

     1). Foundation框架中定义的1个结构体.

 

         typedef struct _NSRange {

            NSUInteger location;

            NSUInteger length;

         } NSRange;

 

         NSRange range;

 

        这个结构体变量一般情况下用来表示1段范围.特别用在子串在主串中的范围表示.

 

        @"hahajackhehe" @"jack" 

 

         4  4

 

        NSRange range = {4, 4};


 

 

    2).声明并初始化结构体变量的方式.

 

        1). 最原始的方式.

             NSRange range;

             range.location = 3;

             range.length = 4;

 

        2). 第二种方式:    NSRange range = {3, 7};

        3). 第三种方式:   NSRange range = {.location = 3,.length = 7};

 

 

        4). Foundation框架中定义了1个函数.这个函数可以快速的创建1NSRange结构体会,

 

            NSRange range =  NSMakeRange(loc, len);

            返回1个指定属性的NSRange结构体变量.

 

 

        5). Foundation框架中定义了1个函数可以将1NSRange结构体变量转换为NSString

 

             NSStringFromRange(ran)函数可以将NSRange结构体变量转换为指定格式的字符串.

 

  17. 字符串的截取.

    取到字符串中的1部分.

 

 

     - (NSString *)substringFromIndex:(NSUInteger)from;从指定的下标出一直截取到最后.

     - (NSString *)substringToIndex:(NSUInteger)to;从第0个开始截取指定的个数.

     - (NSString *)substringWithRange:(NSRange)range;截取指定的1段范围.

 

 

  18.字符串的替换

 

     - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

 

    将字符串中第1个参数替换为第2个参数.友情提示:原来的指针指向字符串的内容是不会变的 会全部替换.

    新串是以方法的返回值返回的.

 

    这个方法还可以做删除.原理:将其替换为@""

 

 

  19.字符串数据转换为其他的类型.使用频率很高.

 

     @property (readonly) double doubleValue;

     @property (readonly) float floatValue;

     @property (readonly) int intValue;

     @property (readonly) NSInteger integerValue

     @property (readonly) long long longLongValue

     @property (readonly) BOOL boolValue

 

 

    转换注意.从头开始转换,能转换多少就是多少.到遇到不能转换的时候就停止转换.

 

 

  20.去掉字符串前后的空格.

     str =  [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    中间的空格无法去掉.


  21.字符串的恒定性.

    一旦创建1个字符串对象,那么这个字符串对象的内容就无法更改,当我们修改字符串的时候,其实是重新的创建了1个字符串对象.

 

     代码案例:

     NSLog(@"-------------------");

     NSString *str = @""; //@""

     for(int i = 0; i < 50000; i++)

     {

        str = [NSString stringWithFormat:@"%@%d",str,i];

     }

     NSLog(@"-------------------");

    会耗费很长的时间.每次循环的时候都会创建1个新的字符串对象.50000,

    因为字符串的恒定性.

 

 

 22.如何让这样的大批量的字符串拼接可以更加快速的1.

 

    1).慢得原因:因为字符串的恒定性,每次修改字符串的时候,是重新的创建1个对象,

 

    2).希望:有没有一种对象是用来存储字符串的,并且存储在这个对象中的字符串数据可以更改.

 

 

 23. NSMutableString

 

    1). Foundation框架中的1个类.NSString继承.

        所以,NSMutableString对象是用来存储字符串数据的.

 

    

    2). NSMutbaleString在父类NSString的基础之上的做扩展.

 

        存储在NSSMutableString对象中的字符串数据可以更改.具备可变性.

        直接可以改存储在NSMutableStirng对象中的字符串数据,不会新创建对象.

 

 

 24. NSMutableString的用法

   

    1).既然是1个类,要使用的话,就得创建1个对象.

 

 

        NSMutableString *str = [NSMutableString string];

 

 

    2).往可变字符串对象中追加字符串.

 

         - (void)appendString:(NSString *)aString; 直接追加内容.

         - (void)appendFormat:(NSString *)format, ...以拼接的方式往可变字符串对象中追加内容.

 

 

    3). 创建NSMutableString对象的时候,记住下面这样的初始化方式是不行的.

         

        NSMutableString *str = @"jack";

 

        @"jack" 1NSString对象,1个父类对象.

        str指针是1NSMutableString类型的1个子类类型的.       

       如果通过子类指针去调用子类独有的成员就会运行错误.

 

 

    4). NSMutableStringNSString继承.

        在使用NSString的地方完全可以使用NSMutableString

 

 

 

  25. 使用NSMutableString来做大批量的字符串拼接.

 

     NSLog(@"~~~~~~~~~~~~");

     NSMutableString *str = [NSMutableString string];

     for(int i = 0; i < 100000; i++)

     {

        [str appendFormat:@"%d",i];

     }

     NSLog(@"~~~~~~~~~~~~");

 

   这个时候 "biu"的一下就结束了.为什么这么快>?因为NSMutableString只有1.每次修改的时候直接修改的是这个对象中的数据.

     

 

 26. 使用建议

     

    1). 我们平时使用的时候,还是使用NSString.因为效率高.

        NSString *str1 = @"jack";

        NSString *str2 = @"jack";

 

 

    2). NSMutbaleString:只在做大批量的字符串拼接的时候才使用.

        大量拼接的时候,就不要去使用NSString因为效率低下.\

 

        10次以上.


原创粉丝点击