NSArray简单细说(九)—— 数组成员操作、创建描述与数组的存储

版本记录

版本号 时间
V1.0 2017.08.26

前言

NSArray是集合类型中的一种,是OC中很重要的概念,这个是我们一定会用到的对象,下面我就继续由整体到细节,由简单到复杂的和大家说一下它的用法。感兴趣的可以看我写的上篇几篇。
1. NSArray简单细说(一)—— 整体了解
2. NSArray简单细说(二)—— 数组的创建
3. NSArray简单细说(三)—— 数组初始化
4. NSArray简单细说(四)—— 数组的查询与检索
5. NSArray简单细说(五)—— 数组中对象的查找
6. NSArray简单细说(六)—— 向数组中元素发送消息
7. NSArray简单细说(七)—— 数组的比较和获得新数组
8. NSArray简单细说(八)—— 数组的排序

一、- (NSString *)componentsJoinedByString:(NSString *)separator;

该方法的作用就是:数组转化为字符串,构造并返回一个NSString对象,该对象是在数组元素之间插入给定的分隔符的结果。

这里还要注意:

  • NSString对象,它是在数组元素之间插入分隔符的结果。 如果数组没有元素,则返回一个表示空字符串的NSString对象。
  • 例如,这段代码摘录将"here be dragons"写入控制台:
NSArray *pathArray = [NSArray arrayWithObjects:@"here", @"be", @"dragons", nil];
NSLog(@"%@",[pathArray componentsJoinedByString:@" "]);
  • 数组中的每个元素都必须处理描述。

下面我们看一个简单的例子

- (void)demoComponentsJoinedByString
{
    NSArray *arr = @[@"6", @"9", @"2", @"1"];
    NSString *resultStr = [arr componentsJoinedByString:@"--"];
    NSLog(@"resultStr = %@", resultStr);
}

下面看输出结果

2017-08-26 09:49:32.998 JJOC[1148:19901] resultStr = 6--9--2--1

结论:就是这么简单。


二、@property(readonly, copy) NSString *description;

该属性的作用就是:表示数组内容的字符串,格式为属性列表。

- (void)demoDescription
{
    NSArray *arr = @[@"6", @"9", @"2", @"1"];
    NSString *resultStr = arr.description;
    NSLog(@"resultStr = %@", resultStr);
}

下面看输出结果

2017-08-26 09:52:38.072 JJOC[1309:23192] resultStr = (
    6,
    9,
    2,
    1
)

结论:很简单,没什么好说的。


三、- (NSString *)descriptionWithLocale:(id)locale;

该方法的作用就是:返回一个字符串,表示数组的内容,格式为属性列表。

看一下参数和返回值:

  • locale :一个NSLocale对象或NSDictionary对象,它指定用于格式化每个数组元素(用于识别)的选项。 如果不想要格式化元素,请指定nil。
  • return:表示数组内容的字符串,格式为属性列表。

还有几点注意:

  • 有关如何将语言环境应用于接收数组中的每个元素的说明,请参阅descriptionWithLocale:indent :

下面看一个简单例子

- (void)demoDescriptionWithLocale
{
    NSArray *arr = @[@"6", @"9", @"2", @"1"];
    NSString *resultStr = [arr descriptionWithLocale:nil];
    NSLog(@"resultStr = %@", resultStr);
}

下面看输出结果

017-08-26 09:58:39.579 JJOC[1539:29886] resultStr = (
    6,
    9,
    2,
    1
)

结论:还算好理解吧。


四、- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;

该方法的作用是:返回一个字符串,表示数组的内容,格式为属性列表。

下面看一下参数和返回值:

  • locale:一个NSLocale对象或NSDictionary对象,它指定用于格式化每个数组元素(用于识别)的选项。 如果不想要格式化元素,请指定nil。
  • level:缩进级别,使输出更可读:将级别设置为0以使用四个空格缩进,或1使用制表符字符缩进输出。

还有几点需要注意:

  • 返回的NSString对象包含每个数组元素的字符串表示形式,按顺序从头到尾。 要获取给定元素的字符串表示形式,descriptionWithLocale:indent:如下进行:
    • 如果该元素是一个NSString对象,那么就按原样使用。
    • 如果元素响应descriptionWithLocale:indent:,则调用该方法来获取元素的字符串表示形式。
    • 如果元素响应descriptionWithLocale:,则调用该方法来获取元素的字符串表示形式。
    • 如果没有满足上述条件,则通过调用其description方法来获得元素的字符串表示。

下面看一个简单例子

- (void)demoDescriptionWithLocaleIndent
{
    NSArray *arr = @[@"6", @"9", @"2", @"1"];
    NSString *resultStr = [arr descriptionWithLocale:[NSLocale currentLocale] indent:0];
    NSLog(@"resultStr = %@", resultStr);
}

看输出结果

2017-08-26 10:14:59.132 JJOC[1881:41243] resultStr = (
    6,
    9,
    2,
    1
)

结论:我基本不用。


五、- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

该方法的作用就是:将数组的内容写在给定路径的文件中。

下面看一下参数和返回值:

  • path:写入数组内容的路径。如果路径包含波形符号(〜),则在调用此方法之前,必须使用stringByExpandingTildeInPath进行扩展。
  • 如果是,阵列将被写入辅助文件,然后将辅助文件重命名为路径。 如果否,数组直接写入路径。 YES选项保证路径(如果存在)将不会被破坏,即使系统在写入时应该崩溃。
  • return:成功YES,失败NO。

这里还要注意:

  • 如果数组的内容都是属性列表对象(NSString,NSData,NSArray或NSDictionary对象),则使用此方法编写的文件可以使用类方法arrayWithContentsOfFile或实例方法initWithContentsOfFile:初始化新数组。 该方法在写出文件之前递归地验证所有包含的对象是属性列表对象,如果所有对象都不是属性列表对象,则返回NO,因为生成的文件不是有效的属性列表。

下面看一个简单例子。

- (void)demoWriteToFile
{
    NSArray *arr = @[@"6", @"9", @"2", @"1"];
    BOOL result = [arr writeToFile: @"/Users/lucy/Desktop/1.txt" atomically:NO];
    NSLog(@"result = %d", result);
}

我在桌面上新建立一个1.txt文件,并将数组内容写进去,下面我们看一下写的结果。

写入结果

结论:工程实践中一般都是写入到沙盒文件。


六、- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;

该方法的作用就是:将数组的内容写入给定URL指定的位置。

下面看一下参数和返回值:

  • url:输入写入的地址。
  • atomically:如果是,数组将被写入辅助位置,然后将辅助位置重命名为aURL。 如果否,则将阵列直接写入aURL。 YES选项确保aURL(如果存在)将不会损坏,即使系统在写入过程中崩溃。
  • return:成功YES,失败NO。

还要注意:

  • 如果数组的内容都是属性列表对象(NSString,NSData,NSArray或NSDictionary对象),则此方法写入的位置可用于使用类方法arrayWithContentsOfURL或实例方法initWithContentsOfURL:初始化新数组。

结论:简单。

后记

未完,待续~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容