版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.24 |
前言
NSArray
是集合類型中的一種幕帆,是OC中很重要的概念,這個是我們一定會用到的對象赖条,下面我就繼續(xù)由整體到細節(jié)失乾,由簡單到復雜的和大家說一下它的用法。感興趣的可以看我寫的上篇幾篇谋币。
1. NSArray簡單細說(一)—— 整體了解
2. NSArray簡單細說(二)—— 數(shù)組的創(chuàng)建
一仗扬、 - (instancetype)init;
這個方法沒什么說的就是對象初始化函數(shù),在以這種方式初始化了一個不可變數(shù)組之后蕾额,它不能被修改早芭。所以一般不會NSArray用它進行初始化沒有意義。
結(jié)論:簡單到爆诅蝶。
二退个、- (instancetype)initWithArray:(NSArray<ObjectType> *)array;
該方法的作用就是:通過給定的數(shù)組,初始化一個新的數(shù)組调炬。在以這種方式初始化了一個不可變數(shù)組之后语盈,它不能被修改。
下面看代碼
- (void)demoInitWithArray
{
NSArray *givenArr = @[@1, @2, @3, @4, @5];
NSArray *arr = [[NSArray alloc] initWithArray:givenArr];
NSLog(@"arr = %@", arr);
}
下面看輸出結(jié)果
2017-08-24 23:39:21.848 JJOC[6849:191099] arr = (
1,
2,
3,
4,
5
)
結(jié)論:簡單缰泡,了解刀荒。
三、- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;
該方法的作用就是:使用Array作為數(shù)組的數(shù)據(jù)對象的源初始化新分配的數(shù)組。
下面看一下參數(shù)和返回值:
-
array
:一個包含對象的數(shù)組缠借,用來初始化新的數(shù)組干毅。 -
flag
:如果是,數(shù)組中的每個對象都會接收到一個copyWithZone:
消息來創(chuàng)建對象的副本必須符合NSCopying
協(xié)議泼返。 在內(nèi)存管理環(huán)境中硝逢,這不是對象否則會接收到的保留消息。 然后將對象副本添加到返回的數(shù)組绅喉。如果否渠鸽,則在內(nèi)存管理環(huán)境中,數(shù)組中的每個對象在添加到返回的數(shù)組時都會收到一條保留消息柴罐。 -
return
:初始化為包含對象的數(shù)組徽缚,或者如果標志為YES,則表示對象的數(shù)組丽蝎。 返回的對象可能與原始接收者不同猎拨。
下面看一下代碼
- (void)demoInitWithArrayCopyItems
{
NSArray *givenArr = @[@1, @2, @3, @4, @5];
NSArray *arr = [[NSArray alloc] initWithArray:givenArr copyItems:YES];
NSLog(@"arr = %@", arr);
}
下面看輸出結(jié)果
2017-08-24 23:52:15.553 JJOC[7246:203744] arr = (
1,
2,
3,
4,
5
)
還有幾點需要注意:以這種方式初始化了一個不可變數(shù)組之后,它不能被修改屠阻。copyWithZone:
方法執(zhí)行淺拷貝红省。 如果你有一個任意深度的集合,那么對于flag參數(shù)傳遞YES就可以執(zhí)行表面下面第一級的不可變拷貝国觉。 如果您通過NO吧恃,第一級的可變性不受影響。 在任何一種情況下麻诀,所有更深層次的可變性都不受影響痕寓。
結(jié)論:簡單,了解蝇闭。
四呻率、- (NSArray<ObjectType> *)initWithContentsOfFile:(NSString *)path;
該方法的作用就是:根據(jù)給定的路徑獲取新的數(shù)組。
下面看一下參數(shù)和返回值:
-
path
:包含由writeToFile:atomically:
方法生成的數(shù)組的表示形式的文件的路徑呻引。 -
return
:一個數(shù)組被初始化為包含由aPath指定的文件的內(nèi)容礼仗,如果無法打開文件或文件的內(nèi)容無法解析為數(shù)組,則該數(shù)組將被初始化為nil逻悠。 返回的對象可能與原始接收者不同元践。
下面看一下代碼
- (void)demoInitWithContentsOfFile
{
NSArray *arr = [[NSArray alloc] initWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/arrayTest.plist"];
NSLog(@"arr = %@", arr);
}
下面看輸出結(jié)果
2017-08-25 00:02:10.074 JJOC[7690:214690] arr = (
three,
two,
one
)
還有幾點需要注意:
- 由
aPath
標識的文件中的數(shù)組表示形式只能包含屬性列表對象(NSString,NSData童谒,NSArray或NSDictionary對象)
单旁。 這個數(shù)組包含的對象是不可變的,即使數(shù)組是可變的饥伊。
結(jié)論:簡單象浑,了解蔫饰。
五、- (NSArray<ObjectType> *)initWithContentsOfURL:(NSURL *)url;
該方法的作用就是:根據(jù)指定的URL初始化一個數(shù)組融柬。
還有幾點需要注意:
- 一個初始化為包含由aURL指定的內(nèi)容的數(shù)組死嗦。 如果位置無法打開或位置的內(nèi)容無法解析為數(shù)組趋距,則返回nil粒氧。 返回的對象可能與原始接收者不同。
- 由aURL標識的位置處的數(shù)組表示必須只包含屬性列表對象(NSString节腐,NSData外盯,NSArray或NSDictionary對象)。 這個數(shù)組包含的對象是不可變的翼雀,即使數(shù)組是可變的饱苟。
結(jié)論:簡單,了解狼渊。
六箱熬、- (instancetype)initWithObjects:(ObjectType)firstObj, ...;
該方法的作用就是根據(jù)參數(shù)列表實例化數(shù)組。
下面我們看一下參數(shù)和返回值:
-
firstObj
:數(shù)組的第一個對象狈邑。 -
...
:以逗號分隔的其他對象列表城须,以nil結(jié)尾。 -
return
:一個數(shù)組被初始化以包含參數(shù)列表中的對象米苹。 返回的對象可能與原始接收者不同糕伐。
下面我們看一下代碼
- (void)demoInitWithObjects
{
NSArray *arr = [[NSArray alloc] initWithObjects:[NSDate date], @1, @"hello", nil];
NSLog(@"arr = %@", arr);
}
下面看輸出結(jié)果
2017-08-25 00:12:14.301 JJOC[7972:224593] arr = (
"2017-08-24 16:12:14 +0000",
1,
hello
)
結(jié)論:簡單,了解蘸嘶。
七良瞧、- (instancetype)initWithObjects:(ObjectType _Nonnull const *)objects count:(NSUInteger)cnt;
該方法的作用就是:根據(jù)給定的C數(shù)組實例化一個新的數(shù)組。
下面我們看一下代碼:
- (void)demoInitWithObjectsCounts
{
NSString *str[3];
str[0] = @"0";
str[1] = @"1";
str[2] = @"2";
NSArray *arr = [[NSArray alloc] initWithObjects:str count:2];
NSLog(@"arr = %@", arr);
}
下面看輸出結(jié)果
2017-08-25 00:19:00.031 JJOC[8258:230150] arr = (
0,
1
)
這里還有幾點需要注意:
- 元素將按照它們在對象中顯示的順序添加到新數(shù)組中训唱,直到但不包括索引計數(shù)褥蚯。在以這種方式初始化了一個不可變數(shù)組之后,它不能被修改况增。
結(jié)論:簡單赞庶,了解。
后記
未完巡通,待續(xù)~~~