NSMutableArray简单细说(二)—— 创建和初始化

版本记录

版本号 时间
V1.0 2017.08.26

前言

NSArray是数组的不变数组类,不边数组在初始化的时候元素就是不变的,不能更改任何一个元素,实际上我们用的较多的是可变数组,因为很多时候我们都需要对数组元素进行增删改查,其中增删改也只有可变数组可以做,也就是说可变数组相对来说更加灵活,这几篇我们就说一下可变数组的这个类及其相关知识,还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以看我写的上面几篇。
1. NSMutableArray简单细说(一)—— 整体了解

一、+ (instancetype)arrayWithCapacity:(NSUInteger)numItems;

该方法的作用就是初始化一个具有指定长度的可变数组。可变数组根据需要扩展; numItems只是建立对象的初始容量。

下面看简单例子。

- (void)demoArrayWithCapacity
{
    NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:10];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

看输出结果

2017-08-26 19:20:56.325 JJOC[10352:259906] arrM = (
), count = 0

可以看见,这里只是初始化长度为10,但是现在还是长度为0,数组中也没什么元素,等待我们后需添加。

结论:创建初始可变长度的数组。


二、+ (NSMutableArray *)arrayWithContentsOfFile:(NSString *)path;

该方法的作用就是:创建并返回一个包含由给定路径指定的文件内容的可变数组。

看一下参数和返回值:

  • path:包含由writeToFile:atomically:method生成的可变数组的字符串表示形式的文件的路径。
  • return:一个包含指定路径文件内容的可变数组。 如果文件无法打开或文件的内容无法解析成可变数组,则返回nil。

还要注意:

  • 由aPath标识的文件中的可变数组表示形式只能包含属性列表对象(NSString,NSData,NSDate,NSNumber,NSArray 或 NSDictionary对象)。 有关详细信息,请参阅属性列表编程指南。 即使数组是可变的,这个数组所包含的对象是不可变的。

看一个简单例子:

- (void)demoArrayWithContentsOfFile
{
    NSMutableArray *arrM = [NSMutableArray arrayWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/arrayTest.plist"];
     NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

看输出结果

2017-08-26 19:27:42.110 JJOC[10591:267458] arrM = (
    three,
    two,
    one
), count = 3

结论:根据指定文件路径生成可变数组,不过这个文件可是有条件的。


三、+ (NSMutableArray *)arrayWithContentsOfURL:(NSURL *)url;

该方法的作用就是:创建并返回一个包含给定URL指定内容的可变数组。

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

  • url:该文件的位置包含由writeToURL:atomically:方法生成的可变数组的字符串表示形式。
  • return:个包含由aURL指定的内容的可变数组。 如果位置无法打开或位置的内容无法解析成可变数组,则返回nil。

还需要注意:

  • 由aURL标识的位置处的数组表示必须只包含属性列表对象(NSString,NSData,NSDate,NSNumber,NSArray 或 NSDictionary对象)。 即使数组是可变的,这个数组所包含的对象是不可变的。

结论:根据URL的内容转化为可变数组,不一定会转变成功。


四、- (instancetype)init;

这个很简单了,对象都可以这么初始化的,allocinit

结论:简单到爆,但是很少这么用。


五、- (instancetype)initWithCapacity:(NSUInteger)numItems;

该方法的作用其实和方法一中那个类方法的作用是相似的,这里是对象方法。

可变数组根据需要扩展; numItems只是建立对象的初始容量。该方法是一个指定的初始化程序。

看一下简单示例。

- (void)demoInitWithCapacity
{
    NSMutableArray *arrM = [[NSMutableArray alloc] initWithCapacity:10];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

看输出结果

2017-08-26 19:37:41.384 JJOC[10890:276809] arrM = (
), count = 0

结论:初始化指定位数的可变数组。


六、- (NSMutableArray *)initWithContentsOfFile:(NSString *)path;

该方法的作用参考方法二即可。

下面看一个简单例子。

- (void)demoInitWithContentsOfFile
{
    NSMutableArray *arrM = [[NSMutableArray alloc ] initWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/arrayTest.plist"];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

看输出结果

2017-08-26 19:40:44.146 JJOC[11028:280035] arrM = (
    three,
    two,
    one
), count = 3

结论:类似方法二,从指定文件路径转化为数组。


七、- (NSMutableArray *)initWithContentsOfURL:(NSURL *)url;

该方法的作用类似方法三,这里就不多说了。

结论:从指定URL转化数组,参考方法三。

后记

简单到爆,但是为了完整性和考虑新手,还是写了一下,谢谢大家的关注~~~

NSMutableArray简单细说(二)—— 创建和初始化_第1张图片

你可能感兴趣的:(NSMutableArray简单细说(二)—— 创建和初始化)