1、Foundation框架介绍
框架:由许多类、方法、函数、文档按照一定的逻辑组织起来的集合
Cocoa:Foundation和AppKit
Cocoa Touch:Foundation和UIKit
Foundation的作用:Foundation框架是Mac\iOS中其他框架的基础,包含了开发中常用的数据类型
删除缓存:/User/用户名/Library/Developer/Xcode/DerivedData(默认隐藏)
显示隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool true
隐藏隐藏文件:defaults write com.apple.finder AppleShowAllFiles - bool false
NSString字符串
1、字符串比较函数
1)比较字符串大小
compare方法,返回结果有三种:
str1 > str2 NSOrderedDescending 1 降序
str1 < str2 NSOrderedAscending -1 升序
str1 == str2 NSOrderedSame 0
相同
取出每个字符,转换为ASCII值比较,默认区分大小写
常见的options方法:NSCaseInsensitiveSearch 不区分大小写
NSLiteralSearch 完全比较,区分大小写,默认情况
NSNumericSearch 比较字符串的字符个数,而不是字符值
[str1
compare
:str2
options
:
NSLiteralSearch
];
当需要多个options条件时,可以使用'|'来间隔
注意:直接使用'==‘进行字符串比较,其本质是地址的比较,与字符串的创建方式有关。
判断字符串内容真正的方法:isEqualToString(BOOL类型)
,且区分大小写
完全相等:就是创建在常量区的字符串,因为只保留一份,内容和地址都一样。
2)NSString前后缀检查及搜索
1、检测地址是否合法
//
如何检测一个字符串是一个网址
// 以 http:// 或者 https:// 开头
// 用法: [str hasPrefix:@" 要检测内容 "];
if ([url hasPrefix : @"http://" ] || [url hasPrefix : @"https://" ]) {
NSLog ( @" 是一个网址 " );
} else {
NSLog ( @" 不是一个网址 " );
// 以 http:// 或者 https:// 开头
// 用法: [str hasPrefix:@" 要检测内容 "];
if ([url hasPrefix : @"http://" ] || [url hasPrefix : @"https://" ]) {
NSLog ( @" 是一个网址 " );
} else {
NSLog ( @" 不是一个网址 " );
}
2、检测文件后缀是否合法
//
检测字符串的后缀
//.jpg/.png/.jpeg/.gif
NSString *imgName = @"xxx.jpg" ;
// 用法: [str hasSuffix:@" 要检测内容 "]
if ([imgName hasSuffix : @".jpg" ]||[imgName hasSuffix : @".png" ]||[imgName hasSuffix : @".jpeg" ]||[imgName hasSuffix : @".gif" ]) {
NSLog ( @" 是一张图片 " );
} else {
NSLog ( @" 不是一张图片 " );
//.jpg/.png/.jpeg/.gif
NSString *imgName = @"xxx.jpg" ;
// 用法: [str hasSuffix:@" 要检测内容 "]
if ([imgName hasSuffix : @".jpg" ]||[imgName hasSuffix : @".png" ]||[imgName hasSuffix : @".jpeg" ]||[imgName hasSuffix : @".gif" ]) {
NSLog ( @" 是一张图片 " );
} else {
NSLog ( @" 不是一张图片 " );
}
3)字符串查找
//
查找某个字符串在另一个字符串中首次出现的位置
//1 、 @"abcdefiosdefios"
//2 、 @"ios"
//1 、 @"abcdefiosdefios"
//2 、 @"ios"
//用法:[str1 rangOfString str2];
//查找2 在 1中首次出现的位置和长度
NSString
*str1 =
@"abcdefiosdefios"
;
NSString *str2 = @"ios" ;
// 返回值 NSRange 结构体
NSString *str2 = @"ios" ;
// 返回值 NSRange 结构体
NSRange range = [str1 rangeOfString:str2];
NSLog(@"%lu,%lu", range.location, range.length);
如果查不到,返回信息:location 特别大的数(NSNotFound) 最大的long类型的数
length 0
so,这种查找,最好使用if,把查找不到的提示写出来
4)NSRange的使用
1、NSRange:
用来表示事物的一个范围,通常是字符串里的NSR字符范围或者数组里的元素范围
typedef struct _NSRange {
NSUInteger location; //位置(起始位置)
NSUInteger length; //字符串出现的长度(实质是子字符串的长度)【范围内的长度】
} NSRange;
2、NSRange的创建方式
NSRange是一个结构体别名,用NSRange定义的变量涉及赋值问题,其中整体赋值需要强制转换为NSRange,因为不强制转换,编译器不知道是数组还是结构体。
OC新增赋值方法:NSMakeRange(loc, len);
查看结构体的内容,可以把结构体转换为字符串:NSString *NSStringFromRange(NSRange range)
用法: NSLog(
@“%@“,
NSStringFromRange(
NSRange range
)
);
2、字符串的截取和替换函数
1)字符串的截取
-(NSString *) substringFromIndex:(NSUInteger)from;
从指定位置from开始(包括指定位置的字符)到尾部
-
(NSString *) substringToIndex:(NSUInteger)to;
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
-(NSString *) substringWithRange:(NSRange)range;
按照所给出的NSRange从字符串中截取子串
返回值都是字符串
//1、从XX位置开始(包括),到尾部结束
//2
、从开始位置,到
XX
位置结束(不包括)
NSLog
(
@"%@"
, [str
substringToIndex
:
5
]); //
http:
//3
、截取一个范围
range
NSRange
r1 = {
3
,
4
};
NSLog(@"%@", [str substringWithRange:r1]); //
p://
2)字符串的替换
- (
NSString
*)stringByReplacingOccurrencesOfString:(
NSString
*)target withString:(
NSString
*)replacement //
用replacement(要替换的内容)替换target(原字符串的内容)
NSString
*str =
@"http:**www.baidu.com*cn"
;
//把*替换为/
NSString *
newStr
= [str
stringByReplacingOccurrencesOfString
:
@“*"
withString
:
@"/"
];
NSLog(@"%@",
newStr
);
注意:多种替换,需分步进行
3、NSString的其他用法
1)获取字符串的每个字符
Gbk gb2312 2
Utf-8 3
-(NSUInteger) length; //返回字符串的长度,OC中不管中英文等,一个字符都是一个字节
-(unichar)characterAtIndex:(NSUInteger)index; //返回index位置对应的字符
2)字符串转换为其他类型
1、字符串转数值
intValue,floatValue,doubleValue
2、OC的字符串和C的字符串转换问题,char *与NSString
a、C—--->OC对象
用C语言的字符串创建OC字符串对象[NSString stringWithUTF8String:(const
char
*)];
b、OC对象———>C的字符串
const char *s = [(
NSString
*) UTF8String];
3)去除首位空格
-(
NSString
*)stringByTrimmingCharactersInset:[NSCharacterSet whitespaceCharacterSet]
NSMutableString介绍和使用
介绍:NSMutableString类继承NSString类,那么NSString的方法在NSMutableString中基本都可以使用。类似链表,可以任意的动态在字符串中添加、删除、插入字符串,更加灵活。
NSMutableString和NSString的区别:1、NSString是不可变的,内容不能进行修改(常量区,只读)
2、NSMutableString是可变的,内容可随时更改(堆区)
3、NSMutableString能使用NSString的所有方法
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生改变
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
NSMutableString
*str = [
NSMutableString
stringWithFormat
:
@"Jack"
];
[str
appendString
:
@"&Rose
”
];//追加
NSLog(@"%@", str); //地址不变,空间变大
//
打印
10
个
itcast
//
创建一个可变的空字符串
NSMutableString *str = [ NSMutableString string ];
NSLog ( @"str = %@" , str);
NSMutableString *str = [ NSMutableString string ];
NSLog ( @"str = %@" , str);
for (int i = 0; i < 10; i++) {
[str appendString:@" itcast"];
}
NSLog(@"str = %@", str);
1、NSMutableString常用的方法
1)通过调用string方法,创建一个空的NSMutableString
-(void)appendString:(
NSString
*)aString; //拼接aString到最后面
-(void)appendFormat:(
NSString
*
)format,...;
//拼接一段格式化字符串到最后面
NSMutableString
*str = [
NSMutableString
string
];
[str
appendFormat
:
@"http://www.baidu.com/%d"
,
100
];
NSLog(@"%@", str);
-(void)deleteCharacterInRange:(
NSString
*
)range;
//从指定的range开始,删除字符
[str
deleteCharactersInRange
:
NSMakeRange
(
3
,
4
)];
NSLog(@"%@", str);
-(void)insertString:(
NSString
*
)aString atIndex:(NSUInteger)loc;
//在loc位置插入aString
[str
insertString
:
@"p://"
atIndex
:
3
];
NSLog(@"%@", str);
-(void)replaceCharactersInRange:(NSRange)range withString:(
NSString
*
)aString;
//使用aString替换range范围内的字符串,一般不是以string开头的一般都不会产生一个新的字符串。replaceOccurrencesOfString方法不需要传范围参数。
[str
replaceCharactersInRange
:
NSMakeRange
(
11
,
5
)
withString
:
@"itcast"
];
NSLog(@"%@", str);
2、字符串使用注意事项
1)NSMutableString易犯错误
//
给可变字符串赋值一个不可变的值,不能再调用可变方法
NSMutableString *str = @"abc";
2)NSMutableString的string属性:会将原对象的所有字符串都覆盖掉
.string属性可以修改字符串内容
3)开发中到底使用NSString还是NSMutableString
绝大多数使用NSString,只有在特殊处理(截取,拼接,替换)等操作,才使用NSMutableString
4)位枚举,枚举值是2的N次方
正常options设置值为1、2、4...
options:也可以置0,表示什么都没做
NSArray的介绍和使用
1、NSArray的基本介绍
NSArray是OC中的数组类,开发中尽量使用NSArray代替C语言数组。C语言数组的弊端,只能存储一种类型的数据,不能很方便的动态添加数组元素,不能很方便的动态删除数组元素。
使用注意:只能存放任意OC对象,并且是有序的。不能存储非OC对象,例如基本数据类型。它是不可变的,一旦初始化,内容就永远固定,不能删除和添加元素。
2、NSArray的创建方式
//NSArray
特点
//
一旦创建,内容不可变
// 只能存放 OC 对象
//1 、创建一个空数组
NSArray *arr1 = [ NSArray array ];
NSLog ( @"arr1 = %@" , arr1); // 可以直接打印,%@可以直接打印对象类型
//2 、创建数组,只有一个元素
// 只能存放 OC 对象
//1 、创建一个空数组
NSArray *arr1 = [ NSArray array ];
NSLog ( @"arr1 = %@" , arr1); // 可以直接打印,%@可以直接打印对象类型
//2 、创建数组,只有一个元素
NSArray *arr2 = [NSArray arrayWithObject:@"1"];
//nil
表示赋值结束,
[
NSNull
null
]表示存一个空
//3、创建数组,有多个元素(
常见写法
)
NSArray *arr3 = [NSArray arrayWithObjects:@"one",
[
NSNull
null
]
, @1, nil];
//4
、调用对象方法,创建数组
NSArray *arr4 = [[ NSArray alloc ] initWithObjects : @"three" , @"four" , nil ];
//5 、用一个数组可以创建另外一个数组
NSArray *arr4 = [[ NSArray alloc ] initWithObjects : @"three" , @"four" , nil ];
//5 、用一个数组可以创建另外一个数组
NSArray *arr5 = [NSArray arrayWithArray:arr3];
3、NSArray的常见用法
NSArray
*arr3 = [
NSArray
arrayWithObjects
:
@"one"
, [
NSNull
null
],
@1
,
nil
];
//1 、获取数组长度
NSLog ( @"%ld" , arr3. count );
//2 、根据下标,获取下表对应的对象
NSLog ( @"%@" , [arr3 objectAtIndex : 2 ]);
//3 、返回元素的下标
NSInteger index = [arr3 indexOfObject : @"one" ];
NSLog ( @"%ld" , index);
//4 、数组中是否包含某个元素
if ([arr3 containsObject : @"one" ]) {
NSLog ( @" 包含 " );
} else {
NSLog ( @" 不包含 " );
//1 、获取数组长度
NSLog ( @"%ld" , arr3. count );
//2 、根据下标,获取下表对应的对象
NSLog ( @"%@" , [arr3 objectAtIndex : 2 ]);
//3 、返回元素的下标
NSInteger index = [arr3 indexOfObject : @"one" ];
NSLog ( @"%ld" , index);
//4 、数组中是否包含某个元素
if ([arr3 containsObject : @"one" ]) {
NSLog ( @" 包含 " );
} else {
NSLog ( @" 不包含 " );
}
//
简化的方式,定义和访问数组
//
定义格式:
@[
数组元素
]
NSArray *arr = @[ @"1" , @4 , @"one" ] ;
// 访问数组 , 可以直接使用 C 语言访问,并不需要下标访问
NSArray *arr = @[ @"1" , @4 , @"one" ] ;
// 访问数组 , 可以直接使用 C 语言访问,并不需要下标访问
NSString *str = arr[1];
4、NSArray的遍历
//
创建数组
NSArray
*arr =
@[
@"one"
,
@"two"
,
@"three"
,
@"four"
]
;
// 遍历数组
//1 、普通的下标访问
for ( int i = 0 ; i < arr. count ; i++) {
NSLog ( @"->%@" , arr[i]);
}
//2 、快速枚举法 for 循环的增强形式
for ( NSString *str in arr) {
NSLog ( @"-->%@" , str);
}
//3 、 block 访问
//obj: 数组元素 idx: 元素下标 stop: 是否停止 (YES: 停止 NO: 不停止 )
[arr enumerateObjectsUsingBlock :^( id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx == 2 ) {
*stop = YES ;
} else {
NSLog ( @"idx = %ld, obj = %@" , idx, obj);
}
// 遍历数组
//1 、普通的下标访问
for ( int i = 0 ; i < arr. count ; i++) {
NSLog ( @"->%@" , arr[i]);
}
//2 、快速枚举法 for 循环的增强形式
for ( NSString *str in arr) {
NSLog ( @"-->%@" , str);
}
//3 、 block 访问
//obj: 数组元素 idx: 元素下标 stop: 是否停止 (YES: 停止 NO: 不停止 )
[arr enumerateObjectsUsingBlock :^( id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx == 2 ) {
*stop = YES ;
} else {
NSLog ( @"idx = %ld, obj = %@" , idx, obj);
}
}];
5、NSArray读写文件
两种文件:.xml和.plist
//
把
NSArray
中的内容写入到文件中
NSArray *array = @[@"one", @"two", @"three"];
//.plist是一种特殊的文件格式,该文件可以手动添加元素
BOOL
isWrite = [array
writeToFile
:
@"/Users/ZacharyUE/Desktop/arr.plist"
atomically
:
YES
];
if (isWrite) {
NSLog ( @" 写入成功 " );
if (isWrite) {
NSLog ( @" 写入成功 " );
}
//
读取
NSArray *readArray = [ NSArray arrayWithContentsOfFile : @"/Users/ZacharyUE/Desktop/arr.plist" ];
NSArray *readArray = [ NSArray arrayWithContentsOfFile : @"/Users/ZacharyUE/Desktop/arr.plist" ];
NSLog(@"%@", readArray);
6、NSArray与字符串
1、把数组元素链接成字符串
NSArray
*arr =
@[@1
,
@2
,
@3
,
@4]
;
//1 、 1-2-3-4 ,链接数组
//[ 数组 componentsJoinedByString:@" 分隔符 "];
NSString *str = [arr componentsJoinedByString : @"-" ];
NSLog ( @"%@" , str);
//1 、 1-2-3-4 ,链接数组
//[ 数组 componentsJoinedByString:@" 分隔符 "];
NSString *str = [arr componentsJoinedByString : @"-" ];
NSLog ( @"%@" , str);
2、字符串分割,保存在数组
//2
、分割字符串,保存在数组
//400-800-12500
NSString *str1 = @"400-800-12500" ;
NSArray *arr1 = [str1 componentsSeparatedByString : @"-" ];
NSLog ( @"%@" , [arr1 firstObject ]); // 第一个元素
NSLog ( @"%@" , [arr1 lastObject ]); // 最后一个元素
//400-800-12500
NSString *str1 = @"400-800-12500" ;
NSArray *arr1 = [str1 componentsSeparatedByString : @"-" ];
NSLog ( @"%@" , [arr1 firstObject ]); // 第一个元素
NSLog ( @"%@" , [arr1 lastObject ]); // 最后一个元素
//400-800-12500#400-888-11200
//
分步进行’#’——>’-'
NSMutableArray使用
1、NSMutableArray介绍
NSMutableArray是NSArray的子类,类似NSMutableString,可变的,可以随时添加、更改、删除元素
//
创建一个空的可变数组
NSMutableArray *arr = [NSMutableArray array];
2、NSMutableArray基本使用方法
//1
、创建一个空的可变数组
NSMutableArray *arr1 = [ NSMutableArray array ];
//2 、初始化一个元素
NSMutableArray *arr2 = [ NSMutableArray arrayWithObject : @"one" ];
//3 、初始化多个元素
NSMutableArray *arr3 = [ NSMutableArray arrayWithObjects : @"i" , @"l" , nil ];
//4 、创建数组,并且指定长度
NSMutableArray *arr4 = [ NSMutableArray arrayWithCapacity : 5 ];
// 添加元素
[arr1 addObject : @"fengjie" ];
[arr1 insertObject : @"za" atIndex : 1 ]; // 在 1 位置插入,如果在 0 插入,自动后移
// 删除元素
[arr1 removeObject : @"za" ]; // 删除某个元素
[arr1 removeObjectAtIndex : 0 ]; // 根据下标删除
[arr2 removeAllObjects ]; // 删除全部
// 修改元素
[arr3 replaceObjectAtIndex : 1 withObject : @"xxx" ]; // 替换某个下标内容
arr3[ 1 ] = @"four" ; // 也是下标替换,简便方法
// 查找元素
BOOL isSearch = [arr3 containsObject : @"i" ];
NSLog ( @"%d" , isSearch);
// 交换元素 用于打乱数组(产生随机下标)
NSMutableArray *arr5 = [ NSMutableArray arrayWithObjects : @1 , @2 , @3 , @4 , @5 , nil ];
[arr5 exchangeObjectAtIndex : 0 withObjectAtIndex : 4 ]; // 交换两个下标内容
NSMutableArray *arr1 = [ NSMutableArray array ];
//2 、初始化一个元素
NSMutableArray *arr2 = [ NSMutableArray arrayWithObject : @"one" ];
//3 、初始化多个元素
NSMutableArray *arr3 = [ NSMutableArray arrayWithObjects : @"i" , @"l" , nil ];
//4 、创建数组,并且指定长度
NSMutableArray *arr4 = [ NSMutableArray arrayWithCapacity : 5 ];
// 添加元素
[arr1 addObject : @"fengjie" ];
[arr1 insertObject : @"za" atIndex : 1 ]; // 在 1 位置插入,如果在 0 插入,自动后移
// 删除元素
[arr1 removeObject : @"za" ]; // 删除某个元素
[arr1 removeObjectAtIndex : 0 ]; // 根据下标删除
[arr2 removeAllObjects ]; // 删除全部
// 修改元素
[arr3 replaceObjectAtIndex : 1 withObject : @"xxx" ]; // 替换某个下标内容
arr3[ 1 ] = @"four" ; // 也是下标替换,简便方法
// 查找元素
BOOL isSearch = [arr3 containsObject : @"i" ];
NSLog ( @"%d" , isSearch);
// 交换元素 用于打乱数组(产生随机下标)
NSMutableArray *arr5 = [ NSMutableArray arrayWithObjects : @1 , @2 , @3 , @4 , @5 , nil ];
[arr5 exchangeObjectAtIndex : 0 withObjectAtIndex : 4 ]; // 交换两个下标内容
NSLog(@"%@", arr5);
错误用法:
arr4 =
@[@1
,
@2]
;//给arr4赋值不可变内容
需使用如下赋值法
[arr4 addObject:@"xxxxxx"];//NSMutableArray不能使用@[元素];赋值
NSDictionary介绍及使用
1、NSDictionary介绍
NSDictionary:翻译过来就是“字典”,不可变的,一旦初始化内容就无法修改
作用:通过一个key(键),就能找到对应的value(值)
2、NSDictionary使用
//
创建空字典
,
没有意义,因为不可改
NSDictionary *dic1 = [ NSDictionary dictionary ];
// 创建只有一组键值对的字典
//key value
//zs 张三
NSDictionary *dic2 = [ NSDictionary dictionaryWithObject : @" 张三 " forKey : @"zs" ];
NSDictionary *dic1 = [ NSDictionary dictionary ];
// 创建只有一组键值对的字典
//key value
//zs 张三
NSDictionary *dic2 = [ NSDictionary dictionaryWithObject : @" 张三 " forKey : @"zs" ];
//创建多组键值对的字典
//前面是value,后面是key,成对出现,键值必须是对象
NSDictionary
*dic3 = [
NSDictionary
dictionaryWithObjectsAndKeys
:
@"value1"
,
@"key1"
,
@"value2"
,
@"key2"
,
nil
];
NSLog(@"%@", dic3);
结果:{
key1 = value1;
key2 = value2;
key1 = value1;
key2 = value2;
}
//
快速创建字典
//
用法:
@{key
:
value}
;
NSDictionary *dic4 = @{@"zs":@"zhangsan", @"ls":@"lisi"};
注意:key值不能重复,如果重复了,也不会报错,最后添加的不能保存在字典中
3、NSDictionary基本使用方法和遍历方法
//
返回键值对的个数
NSLog ( @"%lu" , dic4. count );
// 根据 key 值取出 value 值
[dic4 objectForKey : @"zs" ];
// 字典的遍历
//1 、 for 遍历默认获取 key
// 1 )获取所有的 key
// 2 )根据 key 获取 value
for ( NSString *key in dic4) {
NSLog ( @"key = %@, value = %@" , key, [dic4 objectForKey :key]);;
}
//2 、 block 遍历
//key: 键值 obj:value stop: 是否停止
[dic4 enumerateKeysAndObjectsUsingBlock :^( id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog ( @"%@--->%@" , key, obj) ;
NSLog ( @"%lu" , dic4. count );
// 根据 key 值取出 value 值
[dic4 objectForKey : @"zs" ];
// 字典的遍历
//1 、 for 遍历默认获取 key
// 1 )获取所有的 key
// 2 )根据 key 获取 value
for ( NSString *key in dic4) {
NSLog ( @"key = %@, value = %@" , key, [dic4 objectForKey :key]);;
}
//2 、 block 遍历
//key: 键值 obj:value stop: 是否停止
[dic4 enumerateKeysAndObjectsUsingBlock :^( id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog ( @"%@--->%@" , key, obj) ;
}];
4、NSDictionary的简写及文件操作
//
简写定义字典
NSDictionary *dic1 = @{ @"key1" : @"value1" , @"key2" : @"value2" } ;
// 简写获取元素
NSDictionary *dic1 = @{ @"key1" : @"value1" , @"key2" : @"value2" } ;
// 简写获取元素
NSLog(@"%@", dic1[@"key1"]);
//
把字典保存在文件中
BOOL isWrite = [dic1 writeToFile : @"/Users/ZacharyUE/Desktop/dic.plist" atomically : YES ];
if (isWrite) {
NSLog ( @" 写入成功 " );
} else {
NSLog ( @" 写入成功 " );
BOOL isWrite = [dic1 writeToFile : @"/Users/ZacharyUE/Desktop/dic.plist" atomically : YES ];
if (isWrite) {
NSLog ( @" 写入成功 " );
} else {
NSLog ( @" 写入成功 " );
}
//
从文件中读取字典
NSDictionary *readDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/dic.plist" ];
NSDictionary *readDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/dic.plist" ];
NSLog(@"%@", readDic);
//
省
市
//
河南
信阳
// 郑州
// 河北 保定
// 石家庄
NSArray *hnArr = [ NSArray arrayWithObjects : @"xinyang" , @"zhengzhou" , nil ];
NSArray *hbArr = [ NSArray arrayWithObjects : @"baoding" , @"shijiazhuang" , nil ];
NSDictionary *citys = @{ @"hn" :hnArr, @"hb" :hbArr } ;
NSLog ( @"%@" , citys);
// 郑州
// 河北 保定
// 石家庄
NSArray *hnArr = [ NSArray arrayWithObjects : @"xinyang" , @"zhengzhou" , nil ];
NSArray *hbArr = [ NSArray arrayWithObjects : @"baoding" , @"shijiazhuang" , nil ];
NSDictionary *citys = @{ @"hn" :hnArr, @"hb" :hbArr } ;
NSLog ( @"%@" , citys);
[citys writeToFile:@"/Users/ZacharyUE/Desktop/cityDic.plist" atomically:YES];
//
读取
cityDic.plist
NSDictionary *readCityDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/cityDic.plist" ];
// NSLog(@"%@", readCityDic);
// 遍历
[readCityDic enumerateKeysAndObjectsUsingBlock :^( id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
for ( NSString *str in obj) {
NSLog ( @"city:%@" , str);
}
}];
// 获取每个数组
NSArray *arr = readCityDic[ @"hn" ];
NSDictionary *readCityDic = [ NSDictionary dictionaryWithContentsOfFile : @"/Users/ZacharyUE/Desktop/cityDic.plist" ];
// NSLog(@"%@", readCityDic);
// 遍历
[readCityDic enumerateKeysAndObjectsUsingBlock :^( id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
for ( NSString *str in obj) {
NSLog ( @"city:%@" , str);
}
}];
// 获取每个数组
NSArray *arr = readCityDic[ @"hn" ];
NSLog(@"%@", [arr lastObject]);
NSMutableDictionary
NSMutableDictionary是NSDictionary的子类,可变的,可以添加、更改、删除
//
可变字典的创建
NSMutableDictionary *dic1 = [ NSMutableDictionary dictionary ]; // 空字典
NSMutableDictionary *dic2 = [ NSMutableDictionary dictionaryWithCapacity : 3 ]; // 指定长度
// 给可变字典添加键值
[dic1 setValue : @"lisi" forKey : @"ls" ];
[dic1 setValue : @"zhaosi" forKey : @"zs" ];
// 删除
[dic1 removeObjectForKey : @"ls" ];
// 修改
[dic1 setObject : @"xxx" forKey : @"zs" ];
// 查找
NSArray *arr = [dic1 allKeys ];
if ([arr containsObject : @"zs" ]) {
NSLog ( @" 存在 " ); // 间接使用数组查找
NSMutableDictionary *dic1 = [ NSMutableDictionary dictionary ]; // 空字典
NSMutableDictionary *dic2 = [ NSMutableDictionary dictionaryWithCapacity : 3 ]; // 指定长度
// 给可变字典添加键值
[dic1 setValue : @"lisi" forKey : @"ls" ];
[dic1 setValue : @"zhaosi" forKey : @"zs" ];
// 删除
[dic1 removeObjectForKey : @"ls" ];
// 修改
[dic1 setObject : @"xxx" forKey : @"zs" ];
// 查找
NSArray *arr = [dic1 allKeys ];
if ([arr containsObject : @"zs" ]) {
NSLog ( @" 存在 " ); // 间接使用数组查找
}
NSArray与NSDictionary的区别
1、NSArray是有序的,通过下标访问元素
2、NSDictionary是无序的,通过key访问元素
NSArray用法:1)创建:@[@“Jack”, @“Rose”];
2)访问:array[1];//下标访问
3)赋值:array[1] = @“jack”;
NSDictionary用法:1)创建:@{@“key1”:@“value1”, @“key2”:@“value2”};
2)访问:dic[@“key1”];//键值key访问
3)赋值:dic[@“key1”] = @“value1”;
NSURL读写字符串
URL:Uniform Resource Locator(统一资源定位符),是互联网上标准资源的地址。每个资源都有一个唯一的URL,它包含的信息指出资源的位置。
URL格式:基本URL包含协议、主机域名(服务器名称\IP地址)、路径
URL == 协议头://主机域名/路径
常见的URL协议头:
http/https:超文本传输协议资源,网络资源
http链接很简单,是无状态的
https://前缀表明SSL加密的,使用需要证书
http和https使用不同的连接方式,用的端口也不一样,前者是80,后者是443。
ftp://点对点的文件传输
NSString
*str =
@"$1000000"
;
//URL 统一资源定位符
//NSURL OC 提供的 URL 处理类
//http
//https 加密
//ftp://
//file:// 本地文件
//URL 统一资源定位符
//NSURL OC 提供的 URL 处理类
//http
//https 加密
//ftp://
//file:// 本地文件
//URL 写入文件
//1
)通过
URLWithString
构建
URL(本地路径、网络资源和构建路径调用手机系统的程序)
NSURL
*url = [
NSURL
URLWithString
:
@"file:///Users/ZacharyUE/Desktop/url.txt"
];
//
需要加
file://
才可以写入成功
//2
)
fileURLWithPath
获取本地文件路径
NSURL *url = [NSURL fileURLWithPath:@"/Users/ZacharyUE/Desktop/url1.txt"];//此种写法,不需要file://协议
if
([str
writeToURL
:url
atomically
:
YES
encoding
:
NSUTF8StringEncoding
error
:
nil
]) {
NSLog ( @" 写入成功 " );
} else {
NSLog ( @" 写入失败 " );
NSLog ( @" 写入成功 " );
} else {
NSLog ( @" 写入失败 " );
}
//URL
读文件
NSString *str1 = [ NSString stringWithContentsOfURL :url encoding : NSUTF8StringEncoding error : nil ];
NSString *str1 = [ NSString stringWithContentsOfURL :url encoding : NSUTF8StringEncoding error : nil ];
NSLog(@"%@", str1);