版本記錄
版本號 | 時間 |
---|---|
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轉化數組,參考方法三。
后記
簡單到爆,但是為了完整性和考慮新手,還是寫了一下,謝謝大家的關注~~~