NSArray簡單細說(三)—— 數(shù)組初始化

版本記錄

版本號 時間
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ù)~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尘执,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宴凉,更是在濱河造成了極大的恐慌誊锭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弥锄,死亡現(xiàn)場離奇詭異丧靡,居然都是意外死亡蟆沫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門温治,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饭庞,“玉大人,你說我怎么就攤上這事熬荆≈凵剑” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵卤恳,是天一觀的道長累盗。 經(jīng)常有香客問我,道長突琳,這世上最難降的妖魔是什么若债? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮拆融,結(jié)果婚禮上蠢琳,老公的妹妹穿的比我還像新娘。我一直安慰自己镜豹,他們只是感情好傲须,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逛艰,像睡著了一般躏碳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上散怖,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天菇绵,我揣著相機與錄音,去河邊找鬼镇眷。 笑死咬最,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的欠动。 我是一名探鬼主播永乌,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼具伍!你這毒婦竟也來了翅雏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤人芽,失蹤者是張志新(化名)和其女友劉穎望几,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萤厅,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡橄抹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年靴迫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楼誓。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡玉锌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疟羹,到底是詐尸還是另有隱情主守,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布阁猜,位于F島的核電站丸逸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏剃袍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一捎谨、第九天 我趴在偏房一處隱蔽的房頂上張望民效。 院中可真熱鬧,春花似錦涛救、人聲如沸畏邢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舒萎。三九已至,卻和暖如春蹭沛,著一層夾襖步出監(jiān)牢的瞬間臂寝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工摊灭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咆贬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓帚呼,卻偏偏與公主長得像掏缎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子煤杀,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容