#pragma mark -01. 框架 苹果或者牛X的第三方事先将程序员在编程的时候经常要用到的一些功能写好. 把这些功能封装在1个1个的类中. 这些类的集合就叫做框架. 不同的框架中的类是用来做不同的事情的. Foundation: 包. 有很多类 函数 数据类型. 基础 基本. 这个框架中定义的是我们最基础的类. 其他的框架都是基于Foundation框架的 AVFoundation: UIKit: CoreLocation: ...... 为大家介绍Foundation框架中最常用的类. NSGirl 记. 特点: 简单到爆.量大. NSString NSURL NSMutableString NSArray NSMutableArray NSNumber NSDictionary NSMutableDictionary NSFileManager NSData NSDate CGPoint CGSize CGRect NSValue copy 单例 #pragma mark -02. NSString类. 1). NSString是1个类 定义在Foundation框架中. NSString对象的作用:用来存储字符串数据的. 2). 既然是1个类.那么标准的创建NSString对象的方式. NSString *str1 = [NSString new]; NSString *str2 = [[NSString alloc] init]; NSString *str3 = [NSString string] 以这样的方式创建的字符串对象中存储的字符串数据是 @"" 空字符串. 3). NSString对象是OC中最常用的对象. 所以,为了快速的创建NSString对象. OC提供了一种更为快捷的方式创建NSString对象. 使用@符号. @"jack" 是创建NSString对象的简写方式. 本质上着是创建1个NSString对象,这个对象中存储的是"jack"这个字符串. NSString *str = @"jack"; @"jack" 这是1种创建字符串对象的简写方式.实际上是创建了1个字符串对象,将jack存储进去. str中存储的是这个对象的地址. 4). %p 是打印指针变量的值. %@ 是打印指针指向的对象. 调用对象的description方法. 3. NSString的恒定性. 1). 我们创建字符串对象的时候,如果使用@来快速创建, 那么这个字符串对象是存储在 常量区中的. 如果调用类方法来创建字符串对象,这个字符串对象是存储在堆空间中的. NSString *str1 = @"jack"; //这个字符串对象存储在常量区的 NSString *str2 = [NSString new]; //这个字符串对象是存储在堆区的. NSLog(@"str1 = %p",str1); NSLog(@"str2 = %p",str2); 你会发现,这两个对象的地址相差很多 说明他们不在1个区 2). 存储在内存中的字符串对象.无论是在堆还是常量区. 这个字符串对象的内容是无法更改的. 字符串对象一旦创建,这个字符串对象中存储的字符串数据就不能改变. 永远都只能存储这个. 我们为NSString指针重新赋值1个字符串的时候. 并不是修改原来的那个字符串. 而是重新的创建了1个字符串对象,将这个新的字符串的地址赋值给指针. 不可更改性,即针对堆区也指针对常量区的字符串对象. 3). 当系统准备要在内存中创建个字符串对象的时候. 比如: 当准备要在常量区创建字符串对象的时候,会先检查这个常量区中是否有相同内容的字符串对象. 如果有,直接指向,如果没有才会创建. 堆区呢? 1). 如果字符串对象创建在堆区,不会去检查常量区. 只会检查堆区中是否有相同内容的字符串对象,如果有直接指向 如果没有才会重新的创建. 4). 常量区中的数据是不会被回收的.所以存储在常量区中的字符串不会被回收. 为什么字符串不允许回收呢? 提高效率. 当字符串第2次使用的时候,效率就跟高了. 因为不用创建字符串对象了. 4. NSString是1个类. 就应该有很多个方法. 最最最最常用的几个方法. 1). 得到字符串的长度. @property (readonly) NSUInteger length; 2). 得到指定下标的字符. - (unichar)characterAtIndex:(NSUInteger)index; 返回值是unichar 打印unichar使用%C 3). 以拼接变量的方式组成1个新的字符串 + (instancetype)stringWithFormat:(NSString *)format, ... 4). 判断两个字符串是否相等. == 判断的是左右两边的数据的值是否相等. 要判断的是两个字符串指针指向的字符串对象的内容是否相同. 所以,判断两个字符串的内容是否相同 千万不要使用== 而是应该使用对象方法 - (BOOL)isEqualToString:(NSString *)aString; 5). 将C语言的字符串转换为OC字符串对象. + (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString; nullable 代表返回的对象有可能是nil. 6). 将OC字符串转换为C字符串. --- @property (nullable, readonly) __strong const char *UTF8String #pragma mark -03-NSString的常用方(1) 1. 将字符串的内容写到指定的文件中 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error; 2. 从指定的文件中读取字符串数据. + (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error; 3. 字符串对象不仅可以从磁盘上读取文件的内容. 还可以从网络上读写数据. 可以读取1个网页的源代码.ftp服务器上的文件也可以读取. 网页地址,ftp文件地址. URL 统一资源路径. 也就是1个网址.ftp文件的地址. 磁盘上的文件的地址. 网址的URL标准写法: http://www.itheima.com ftp文件的URL标准写法: ftp://server.itheima.com/aa.avi 磁盘文件路径: file:///Users/Itcast/Desktop/abc.txt NSString可以从1个URL路径中读写数据. 1). 先将URL路径封装在1个NSURL对象中 NSURL *url1 = [NSURL URLWithString:@"http://www.itheima.com"]; NSURL *url2 = [NSURL URLWithString:@"ftp://server.itheima.com/1.txt"]; NSURL *url3 = [NSURL URLWithString:@"file:///Users/Itcast/Desktop/abc.txt"]; 2). 使用类方法从NSURL对象中读取数据. + (nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error; 3). 往NSURL中写入数据. - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
|