版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.08.26 |
前言
NSArray
是數(shù)組的不變數(shù)組類,不邊數(shù)組在初始化的時候元素就是不變的酣栈,不能更改任何一個元素惰说,實際上我們用的較多的是可變數(shù)組,因為很多時候我們都需要對數(shù)組元素進行增刪改查岳服,其中增刪改也只有可變數(shù)組可以做剂公,也就是說可變數(shù)組相對來說更加靈活,這幾篇我們就說一下可變數(shù)組的這個類及其相關(guān)知識吊宋,還是老規(guī)矩從整體到局部纲辽,從淺入深進行講解,謝謝大家。感興趣的可以看我寫的上面幾篇拖吼。
1. NSMutableArray簡單細說(一)—— 整體了解
2. NSMutableArray簡單細說(二)—— 創(chuàng)建和初始化
一鳞上、- (void)addObject:(ObjectType)anObject;
該方法的作用是:在數(shù)組的末尾插入給定的對象。
下面看一下參數(shù):
-
anObject
:將對象添加到數(shù)組的內(nèi)容的末尾吊档。 該值不能為零篙议。如果anObject
為零,則引發(fā)NSInvalidArgumentException
異常怠硼。
看簡單示例
- (void)demoAddObject
{
NSMutableArray *arrM = [NSMutableArray array];
[arrM addObject:@"hello"];
NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}
下面看輸出結(jié)果
2017-08-26 20:18:41.376 JJOC[11456:294455] arrM = (
hello
), count = 1
結(jié)論:可以加入非空對象鬼贱。
二、- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;
該方法的作用:將包含在另一個給定數(shù)組中的對象添加到接收數(shù)組的內(nèi)容的末尾香璃。
下面看簡單示例代碼这难。
- (void)demoAddObjectsFromArray
{
NSArray *givenArr = @[@1, @2, @3, @4];
NSMutableArray *arrM = [NSMutableArray array];
[arrM addObjectsFromArray:givenArr];
NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}
看輸出結(jié)果
2017-08-26 20:23:42.816 JJOC[11648:299402] arrM = (
1,
2,
3,
4
), count = 4
結(jié)論:根據(jù)給定數(shù)組給可變數(shù)組增加元素。
三增显、- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
該方法的作用就是:在給定的索引中將給定對象插入到數(shù)組的內(nèi)容中雁佳。
下面就看一下參數(shù):
-
anObject
:要添加到數(shù)組的內(nèi)容的對象。 該值不能為nil同云。如果anObject
為nil糖权,則引發(fā)NSInvalidArgumentException
異常。 -
index
:要插入對象的數(shù)組中的索引炸站。 該值不能大于數(shù)組中的元素數(shù)星澳。如果索引大于數(shù)組中的元素數(shù)量,則引發(fā)NSRangeException
旱易。
下面還要注意:
- 如果索引已經(jīng)被占用禁偎,索引和其他對象將通過向索引添加1來移動,以騰出空間阀坏。
請注意如暖,NSArray
對象不像C數(shù)組。 也就是說忌堂,即使您在創(chuàng)建數(shù)組時指定了大小盒至,指定的大小也被視為“提示”; 數(shù)組的實際大小仍為0.這意味著您不能在大于當前數(shù)組的索引的索引上插入對象。 例如士修,如果數(shù)組包含兩個對象枷遂,其大小為2,則可以在索引0,1或2處添加對象棋嘲。索引3是非法的酒唉,超出范圍; 如果您嘗試在索引3添加一個對象(當數(shù)組的大小為2時),NSMutableArray
引發(fā)異常沸移。
下面看示例代碼
- (void)demoInsertObject
{
NSMutableArray *arrM = [NSMutableArray array];
[arrM insertObject:@"hello, world" atIndex:0];
NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}
下面看輸出結(jié)果
2017-08-26 20:32:45.194 JJOC[11930:309294] arrM = (
"hello, world"
), count = 1
結(jié)論:數(shù)組中插入元素痪伦,可以隨便的安排數(shù)組元素的位置侄榴。
四、- (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet *)indexes;
該方法的作用是:將提供的數(shù)組中的對象插入到指定索引的接收數(shù)組中网沾。
下面看一下參數(shù):
-
objects
:要插入到接收數(shù)組中的一組對象牲蜀。 -
indexes
:要插入對象中的對象的索引。 索引中位置的計數(shù)必須等于對象的計數(shù)
還要注意:
- 對象中的每個對象依次在索引中指定的相應(yīng)位置依次插入到接收數(shù)組中绅这。 實現(xiàn)在概念上類似于以下示例中所示:
- void insertObjects:(NSArray *)additions atIndexes:(NSIndexSet *)indexes
{
NSUInteger currentIndex = [indexes firstIndex];
NSUInteger i, count = [indexes count];
for (i = 0; i < count; i++)
{
[self insertObject:[additions objectAtIndex:i] atIndex:currentIndex];
currentIndex = [indexes indexGreaterThanIndex:currentIndex];
}
}
由以下示例說明產(chǎn)生的行為:
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:3];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
// Output: array: (one, a, two, b, three, four)
因此,如果一個位置指定陣列的計數(shù)或前面的插入之后的數(shù)組的計數(shù)在辆,并且超出邊界的其他位置以與該位置相鄰的方式進行证薇,則索引指定的位置可能只能超過接收陣列的范圍, 如以下實施例所示匆篓。
在此示例中浑度,兩個新對象都附加到數(shù)組的末尾。
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:5];
[indexes addIndex:4];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
// Output: array: (one, two, three, four, a, b)
如果將[indexes addIndex:4]
替換為[indexes addIndex:6]
(使索引為5和6)鸦概,則應(yīng)用程序?qū)⑹〔⒊霈F(xiàn)超出范圍的異常箩张。
在這個例子中,兩個對象被添加到數(shù)組的中間窗市,另一個在數(shù)組的當前端(索引4)先慷,這意味著它是從修改的數(shù)組的末尾開始的第三個。
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
[indexes addIndex:4];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
// Output: array: (one, a, b, two, c, three, four)
如果用[indexes addIndex:6]
替換[index addIndex:4]
(使索引為1,2和6)咨察,則輸出為(一论熙,a,b摄狱,二脓诡,三,四媒役,c)
祝谚。
如果對象或索引為nil,此方法將引發(fā)異常酣衷。
下面看示例代碼
- (void)demoInsertObjects
{
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
[indexes addIndex:4];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
}
下面看輸出結(jié)果
2017-08-26 20:48:50.816 JJOC[12416:327044] array: (
one,
a,
b,
two,
c,
three,
four
)
結(jié)論:集體插入對象交惯,一勞永逸。
后記
未完鸥诽,待續(xù)~~~