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<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;

這個很簡單了,對象都可以這么初始化的,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<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轉化數組,參考方法三。

后記

簡單到爆,但是為了完整性和考慮新手,還是寫了一下,謝謝大家的關注~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容