本文主要介绍以下几部分
框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合。
Foundation框架则定义Objective-C中底层的类,是Mac / iOS 其他框架的基础。它不仅提供了一系列有用的基本对象类,还引入了一些在OC语言中没有的功能范式。Foundation框架的设计目的是:
(1)提供一套基本的实用类
(2)使得开发软件更容易
(3)支持Unicode字符串,对象持久化,对象分配
(4)提高OS独立性,增强可移植性
Foundation框架中大约有125个可用的头文件,但使用时只需要:
#import <Foundation/Foundation.h>
因为Foundation.h文件实际上导入了其他所有Foundation框架中的头文件。
如果不小心修改了系统自带的头文件,系统会报错,解决方法是:删除Xcode的缓存(缓存路径是)
一、NSString
1、概念
一个NSString对象代表一个字符串(文字内容),也称NSString为字符串类。
2、创建:
(1)最直接的方式(这是常量字符串)
NSString *str1 = @"abc";
NSString *str2 = @"abc";
NSLog(@"str1 addr = %p", str1); //= 0x100001038,存储在内存的常量区
NSLog(@"str2 addr = %p", str2); //同上,可见字符串相同的常量的地址相同
(2)格式化的方式
NSString *str3 = [NSString stringWithFormat:@"%@", @"jack"];
NSString *str4 = [[NSString alloc] initWithFormat:@"the year is %d", 2015];
NSLog(@"str3 addr = %p", str3); //= 0x6b63616a45 (?)
NSLog(@"str4 addr = %p", str4); //= 0x100203e60,存储在内存的堆区
(3)从文件中读取
NSString *str0 = @"welcome";
NSError *err;
[str0 writeToFile:@"/Users/yons/Desktop/f.txt" atomically:YES encoding:NSUTF8StringEncoding error:&err];
//先把str0写入到文件去,写入成功则返回YES,err == nil;写入失败,则返回NO,err != nil
//error:后面的参数类型应该是 NSError **,是个二级指针,所以将指针 err 取地址
//判断是否写入成功
if (err != nil) {
NSLog(@"write failed");
}else{
NSLog(@"write successfully");
}
NSString *str5 = [NSString stringWithContentsOfFile:@"/Users/yons/Desktop/f2.txt" encoding:NSUTF8StringEncoding error:&err];
//从文件中读取字符串显示到控制台上
//判断是否读取成功
if (err == nil) {
NSLog(@"read file successfully");
NSLog(@"str5 = %@", str5);
}else{
NSLog(@"read failed");
//可以打印err的信息
NSLog(@"%@", err);
//也可以用:NSLog(@"%@", [err localizedDescription]); 来打印简单的错误信息
}
(4)从URL中读取
URL是Uniform Resource Locator(统一资源定位符)的简称。它是互联网上标准资源的地址,每一个URL对应唯一的资源,每个资源也对应唯一的URL。
URL的格式:应该包含协议、主机域名(服务器名称/IP地址)、路径。(即URL == 协议头://主机域名/路径)
3、比较大小
1)字符串依据排序顺序的不同,会有大小的差异。可以用对象方法 compare 来在两个NSString对象之间比较:
- (NSComparisonResult)compare:(NSString *)string;
如:
NSLog(@"%@ compare to %@: %ld", str1, str3, [str1 compare:str3]);
//比较两个字符串的内容大小。比较方法:逐个地将字符的ASCII值进行比较,比较结果为NSComparisonResult
//输出结果:abc compare to jack: -1
对 NSComparisonResult 的定义为:
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
即:升序,结果为-1;降序,结果为1;相等,结果为0
也可以设置字符串比较的条件。如:
//加参数 NSNumericSearch 使得字符串会比较其中的数字
NSString *str1 = @"5a";
NSString *str3 = [NSString stringWithFormat:@"%@", @"12j"];
NSLog(@"%@ compare to %@: %ld", str1, str3, [str1 compare:str3]);
NSLog(@"%@ compare to %@: %ld", str1, str3, [str1 compare:str3 options:NSNumericSearch]);
//输出结果:
5a compare to 12j: 1 // 只是逐个字符时的结果
5a compare to 12j: -1 // 把字符中的连续数字当做整体来比较时的结果
options:后面的参数类型为 NSStringCompareOptions,定义为:
typedef NS_OPTIONS(NSUInteger, NSStringCompareOptions) {
NSCaseInsensitiveSearch = 1, //不区分大小写字符
NSLiteralSearch = 2, //完全比较,区分大小写(默认)
NSBackwardsSearch = 4,
NSAnchoredSearch = 8,
NSNumericSearch = 64, //比较字符串中的数字,如Foo2.txt < Foo7.txt < Foo25.txt
NSDiacriticInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 128,
NSWidthInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 256,
NSForcedOrderingSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 512,
NSRegularExpressionSearch NS_ENUM_AVAILABLE(10_7, 3_2) = 1024
};
可以用“|”来添加多个限制条件。
2)判断是否相等
用对象方法 :
- (BOOL)isEqualToString:(NSString *)aString;
如:
NSString *str1 = @"abc";
NSString *str3 = [NSString stringWithFormat:@"%@", @"abc"];
NSLog(@"%@ equal %@? %d", str1, str3, [str1 isEqualToString:str3]);
//两个字符串的内容(不是地址)相比较,区分大小写,相同则返回YES,反正返回NO
NSLog(@"%@ == %@ ? %d", str1, str3, str1 == str3);
//"=="比较的是地址。
//输出结果:
abc equal abc? 1
abc == abc ? 0
4、前后缀检查及搜索
1)前缀检查
用对象方法:
- (BOOL)hasPrefix:(NSString *)aString;