------ <a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a> 期待与您交流! -------
Foundation框架的常用类
一.Foundation框架介绍
1.什么是框架?
框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,
以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架
为所有程序开发奠定基础的框架称为Foundation框架
Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对
象集合,如数组,字典和集合,其他功能包括处理日期和时间、内存管
理、处理文件系统、存储(或归档)对象、处理几何数据结构(如点和长方形)
Cocoa是Foundation和AppKitCocoa Touch是Foundation和UIKit
Foundation框架中大约有125个可用的头文件,作为一个简单的形式,可以简单地使用以下语句导入 : #import <Foundation/Foundation.h> 因为Foundation.h文件实际上导入其他所有Foundation框架中的头文件
2.Foundation框架的作用
Foundation框架是Mac\iOS中其他框架的基础Foundation
框架包含了很多开发中常用的数据类型:
结构体
枚举
类
3)如何使用Foundation框架
要想使用Foundation框架中的功能,包含它的主文件即可#import <Foundation/Foundation.h>
4)不小心修改了系统的文件,引起的错误
有时候会在不经意之间修改了系统自带的头文件,比如NSString.h
解决方案很简单,只需要删除Xcode的缓存即可
二.NSString
1.什么是NSString?
一个NSString对象就代表一个字符串(文字内容)
一般称NSString为字符串类
2.NSString的创建方式
1)最直接的方式(这是常量字符串)
NSString *str = @"abc";
NSString *st3 = @"abc";
注意此种写法,字符串储存在内存的常量区
2)格式化的方式
NSString *st2 = [NSString stringWithFormat:@"%@", @"jack"];
NSString *str = [[NSString alloc] initWithFormat:@"My age is %d", 10];
注意这种写法,字符串存储在内存的堆区(地址不一样
3) 从文件中读取
4) 从URL中读取
3.使用NSURL读写字符串
(1)什么是URL?
URL的全称是Uniform Resource Locator(统一资源定位符)URL是
互联网上标准资源的地址互联网上的每个资源都有一个唯一的URL,
它包含的信息指出资源的位置根据一个URL就能找到唯一的一个资源
(2)URL的格式?
基本URL包含协议、主机域名(服务器名称\IP地址)、路径协议 服务器的域名 路径
举例: http://ios.itcast.cn/ios/images/content_25.jpg
可以简单认为: URL == 协议头://主机域名/路径
(3)常见的URL协议头(URL类型)
http\https :超文本传输协议资源, 网络资源
在URL前加https://前缀表明是用SSL加密的。
你的电脑与服务器之间收发的信息传输将更加安全。
Web服务器启用SSL需要获得一个服务器证书并将该证书与
要使用SSL的服务器绑定。http和https使用的是完全不同
的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的
https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全
ftp :文件传输协议
(4)使用NSURL读写字符串
传入完整的字符串创建
NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/str.txt"];
通过文件路径创建(默认就是file协议的)
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/str.txt"];
4.NSString的常见方法:
- (NSString *)uppercaseString;
全部字符转为大写字母
- (NSString *)lowercaseString
全部字符转为小写字母
- (NSString *)capitalizedString
首字母变大写,其他字母都变小写。如果一个句子中有多个单词,
那么会将每个单词的首字母变成大写,其余字母变成小写
- (BOOL)isEqualToString:(NSString *)aString;
两个字符串的内容相同就返回YES, 否则返回NO
注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
- (NSComparisonResult)compare:(NSString *)string;
这个方法可以用来比较两个字符串内容的大小
比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 >右侧,返回NSOrderedDescending,
如果左侧 <右侧,返回NSOrderedAscending,
如果左侧 ==右侧返回NSOrderedSame
- (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
忽略大小写进行比较,返回值与compare:一致
- (BOOL)hasPrefix:(NSString *)aString;
是否以aString开头
- (BOOL)hasSuffix:(NSString *)aString;
是否以aString结尾
- (NSRange)rangeOfString:(NSString *)aString;
用来检查字符串内容中是否包含了aString
如果包含, 就返回aString的范围
如果不包含, NSRange的location为NSNotFound, length为0
反方向搜索:[str rangeOfString: @”str” options: NSBackwardsSearch];
// 从后向前搜索
- (NSString *)substringFromIndex:(NSUInteger)from;
从指定位置from开始(包括指定位置的字符)到尾部
- (NSString *)substringToIndex:(NSUInteger)to;
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
- (NSString *)substringWithRange:(NSRange)range;
按照所给出的NSRange从字符串中截取子串
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)targetwithString:(NSString *)replacement;
用replacement替换target
- (NSUInteger)length;
返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符)
- (unichar)characterAtIndex:(NSUInteger)index;返回index位置对应的字符
三.NSArray
NSArray是OC中的数组类, 开发中建议尽量使用NSArray
替代C语言中的数组C语言中数组的弊端
int array[4] = {10, 89, 27, 76};只能存放一种类型的数据.(类型必须一致)不能很方便地动态添加数组元素、
不能很方便地动态删除数组元素(长度固定)
2.NSArray的注意
只能存放任意OC对象, 并且是有顺序的不能存储非OC对象, 比如int\float\double\char\enum\struct等
它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,
不能删除里面的元素,也不能再往里面添加元素
3.NSArray的创建方式
1)NSArray的类方法创建
+ (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject;
+ (instancetype)arrayWithObjects:(id)firstObj, ...;
+ (instancetype)arrayWithArray:(NSArray *)array;
+ (id)arrayWithContentsOfFile:(NSString *)path; //读取一个xml文件.
+ (id)arrayWithContentsOfURL:(NSURL *)url; //读取一个xml文件.
2)使用NSArray的对象方法创建
3)使用已经存在数组创建新的数组
4.NSArray的使用注意
NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。
NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是
数组元素结束的标记)。nil就是0。0也是基本数据类型,不能存放到NSArray中。
NSArray *array = [NSArray array];
// 这样的数组永远是空的,不可能向其中增加值(不可变性)
5.NSArray的常见用法
- (NSUInteger)count;获取集合元素个数
- (id)objectAtIndex:(NSUInteger)index;获得index位置的元素
-(BOOL)containsObject:(id)anObject;
是否包含某一个元素
- (id)lastObject;返回最后一个元素
- (id)firstObject;返回最后一个元素
- (NSUInteger)indexOfObject:(id)anObject;
查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
在range范围内查找anObject元素在数组中的位置
6.NSArray的简写形式
自从2012年开始, Xcode的编译器多了很多自动生成
代码的功能,使得OC代码更加精简数组的创建
之前
[NSArray arrayWithObjects:@"Jack", @"Rose", @"Jim", nil];
现在
@[@"Jack", @"Rose", @"Jim"];
数组元素的访问
之前
[array objectAtIndex:0];
现在
array[0];
7.NSArray 的遍历方法
8.NSArray 读写文件(1)NSArray的下标遍历
(2)NSArray的快速遍历
(3)NSArray使用block遍历
(1)NSArray数据写入到文件中
(2)从文件中读取数据到NSArray中
9.NSArray 与字符串
(1)把数组元素链接成字符串
- (NSString *)componentsJoinedByString:(NSString *)separator;
这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
(2)字符串分割方法
四.NSMutableArray
1.NSMutableArray介绍
NSMutableArray是NSArray的子类
NSArray是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的,
不能删除里面的元素,也不能再往里面添加元素
NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素
// 创建一个空的NSMutableArray
NSMutableArray *array = [NSMutableArray array];
2.NSMutableArray基本使用方法
- (void)addObject:(id)object;
添加一个元素
- (void)addObjectsFromArdObray:(NSArray *)array;
添加otherArray的全部元素到当前数组中
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
在index位置插入一个元素
- (void)removeLastObject;
删除最后一个元素
- (void)removeAllObjects;
删除所有的元素
- (void)removeObjectAtIndex:(NSUInteger)index;
删除index位置的元素
- (void)removeObject:(id)object;
删除特定的元素
- (void)removeObjectsInRange:(NSRange)range;
删除range范围内的所有元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
用anObject替换index位置对应的元素
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
交换idx1和idx2位置的元素
3.NSMutableArray 错误用法
NSMutableArray *array = @[@"bob", @"steve", @"john"];
[array addObject:@“Peter”];
// 错误,使用@[@"bob", @"steve", @"john"]这种方式创建的永远是NSArray(不可变数组)
// 正确
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"bob", @"steve", @"john"]];
[array addObject:@"Peter"];
五.NSDictionary
1.什么是NSDictionary
NSDictionary翻译过来叫做“字典” 日常生活中,
“字典”的作用: 通过一个拼音或者汉字,就能找到对应的详细解释
NSDictionary的作用类似:通过一个key(键), 就能找到对应的value(值)
NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改
2.NSDictionary的创建
+ (instancetype)dictionary; + (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key; // objectForKey,根据键取值。
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
3.快速创建字典
@{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};
4.键值对集合的特点
1)字典存储的时候,必须是"键值对"的方式来存储(同时键不要重复)
2.)键值对中存储的数据是"无序的"
3.)键值对集合可以根据键, 快速获取数据
5. NSDictionary基本使用方法
- (NSUInteger)count; 返回字典的键值对数目
- (id)objectForKey:(id)aKey; 根据key取出value
6.NSDictionary遍历方法
1)快速遍历
for (NSString *key in dict) { }
2)Block遍历
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { }];
7. NSDictionary的简写形式
1)NSDictionary的创建
以前
[NSDictionary dictionaryWithObjectsAndKeys:@"Jack", @"name", @"男", @"sex", nil];
现在
@{@"name": @"Jack", @"sex" : @"男”};
2)NSDictionary获取元素
以前
[dict objectForKey:@"name”];
现在
dict[@"name”];
8.NSDictionary文件操作
将字典写入文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
从文件中读取字典到内存中
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
保存结果是xml文件格式,但苹果官方推荐为plist后缀.
把字典放到NSArray中,调用array的writeToFile
+ (id)dictionaryWithContentsOfURL:(NSURL *)url;
9. NSDictionary使用注意
字典中的键不要重复。(虽然重复也不报错,会自动取在前面的那个)
六. NSMutableDictionary
1.什么是NSMutableDictionary
NSMutableDictionary是NSDictionary的子类 NSDictionary是不可变的,一旦初始化完
毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素
NSMutableDictionary是可变的,随时可以往里面添加\更改\删除元素
2.NSMutableDictionary常用方法
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
添加一个键值对(会把aKey之前对应的值给替换掉)
- (void)removeObjectForKey:(id)aKey;
通过aKey删除对应的value
- (void)removeAllObjects;
删除所有的键值对
3. NSMutableDictionary简写形式
快速创建可变字典
dict.dictionary = @{@"name" : @"bob", @"age" : @"18"};
设置键值对
以前
[dict setObject:@"Jack" forKey:@"name”];现在dict[@"name"] = @"Jack";
七. NSRange
1. NSRange的定义和使用
NSRange是Foundation框架中比较常用的结构体, 它的定义如下:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length; } NSRange;
// NSUInteger的定义 typedef unsigned int NSInteger; typedef unsigned long NSUInteger;
NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
2.NSRange创建的几种方式
方式1
NSRange range;
range.location = 7;
range.length = 3;
方式2
NSRange range = {7, 3};
或者
NSRange range = {.location = 7, .
length = 3};
方式3 :
使用NSMakeRange函数
NSRange range = NSMakeRange(7, 3);
方式4 :
最直接的方式
NSRange range = {5,8};
查看Range的值,可以使用 NSLog(@"%@",NSStringFromRange(range));