#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;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |