版本记录
版本号 | 时间 |
---|---|
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<ObjectType> *)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<ObjectType> *)arrayWithContentsOfURL:(NSURL *)url;
该方法的作用就是:创建并返回一个包含给定URL指定内容的可变数组。
下面看一下参数和返回值:
-
url
:该文件的位置包含由writeToURL:atomically:
方法生成的可变数组的字符串表示形式。 -
return
:个包含由aURL指定的内容的可变数组。 如果位置无法打开或位置的内容无法解析成可变数组,则返回nil。
还需要注意:
- 由aURL标识的位置处的数组表示必须只包含属性列表对象
(NSString,NSData,NSDate,NSNumber,NSArray 或 NSDictionary对象)
。 即使数组是可变的,这个数组所包含的对象是不可变的。
结论:根据URL的内容转化为可变数组,不一定会转变成功。
四、- (instancetype)init;
这个很简单了,对象都可以这么初始化的,alloc
和init
。
结论:简单到爆,但是很少这么用。
五、- (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<ObjectType> *)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<ObjectType> *)initWithContentsOfURL:(NSURL *)url;
该方法的作用类似方法三,这里就不多说了。
结论:从指定URL转化数组,参考方法三。
后记
简单到爆,但是为了完整性和考虑新手,还是写了一下,谢谢大家的关注~~~