Foundation框架之 NSString 和 集合

本文主要介绍以下几部分
这里写图片描述

框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合。
Foundation框架则定义Objective-C中底层的类,是Mac / iOS 其他框架的基础。它不仅提供了一系列有用的基本对象类,还引入了一些在OC语言中没有的功能范式。Foundation框架的设计目的是:
(1)提供一套基本的实用类
(2)使得开发软件更容易
(3)支持Unicode字符串,对象持久化,对象分配
(4)提高OS独立性,增强可移植性

Foundation框架中大约有125个可用的头文件,但使用时只需要:

#import <Foundation/Foundation.h>

因为Foundation.h文件实际上导入了其他所有Foundation框架中的头文件。

如果不小心修改了系统自带的头文件,系统会报错,解决方法是:删除Xcode的缓存(缓存路径是)

下图是整理自:
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html
这里写图片描述

一、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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值