Objective-C的數組比C++,Java的數組強大在于,NSArray儲存的對象可以是不同的對象。但隻能儲存對象,int ,char,double等基本資料類型不能直接儲存,需要通過轉換成對象才能加入數組。
1、NSArray 不可變數組
[array count] : 數組的長度。
[array objectAtIndex 0]: 傳入數組腳标的id 得到資料對象。
[arrayWithObjects; ...] :向數組對象初始化指派。這裡可以寫任意對象的指針,結尾必須使用nil。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSObject *obj = [[NSObject alloc]init];
NSArray *array = [NSArray arrayWithObjects:
@"a",
obj,
@"c",nil];
NSLog(@"array Count:%lu",[array count]);
//周遊數組
for (NSObject *object in array) {
NSLog(@"數組對象:%@", object);
}
[obj release];
}
return 0;
}
2、NSMutableArray可變對象數組
[NSMutableArray arrayWithCapacity:6] :初始化可變數組對象的長度,如果後面代碼繼續添加數組超過長度6以後NSMutableArray的長度會自動擴充,6是自己可以設定的顆粒度。
[array addObject:...] : 向可變數組尾部添加資料對象。
[array addObjectsFromArray:..] :向可變數組尾部添加一個數組對象。
2.1 普通使用:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSObject *obj = [[NSObject alloc]init];
NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];
[muArray addObject:@"對象1"];
[muArray addObject:@"對象2"];
[muArray addObject:@"對象3"];
[muArray addObject:@"對象4"];
[muArray insertObject:@"攪局的" atIndex:2];
[muArray addObject:obj];
for (NSObject * object in muArray) {
NSLog(@"數組對象:%@", object);
}
[obj release];
}
return 0;
}
NSRange range = NSMakeRange(0,3); 設定一個範圍為 0 到 3 之間。
[array removeObject:obj inRange:range] : 設定在一個範圍内删除資料,如果這個範圍内沒有删除的這個對象則不會删除任何東西。例子中因為obj對象在 數組 0 到 3的範圍内,是以obj就被删除掉了。
2.2 removeObject和removeObjectIdenticalTo
[array removeObject:(id)] :删除數組中指定元素,根據對象isEqual消息判斷。
[array removeObjectIdenticalTo:(id)] : 删除數組中指定元素,根據對象的位址判斷
[array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定範圍内删除指定的元素。
[array removeObjectAtIndex:(NSUInteger)]:删除數組中指定腳标索引的資料。
[array removeObjectsInArray:(NSArray *)] :删除一個數組的元素。
下面我們主要驗證下removeObject removeObjectIdenticalTo這兩個方法的差別,
先實驗removeObject
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *str1 = [[NSString alloc] init];
NSString *str2 = [[NSString alloc] init];
NSString *str3 = [str1 stringByAppendingFormat:@"字元串"];
NSString *str4 = [str2 stringByAppendingFormat:@"字元串"];
NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];
[muArray addObject:@"對象"];
[muArray addObject:str3];
[muArray addObject:str4];
for (NSObject * object in muArray) {
NSLog(@"數組對象:%@", object);
}
if ([str3 isEqual:str4]) {
NSLog(@"str1 isEqual str2");
}
if (str3 == str4) {
NSLog(@"str1 == str2");
}
[muArray removeObject:str3];
for (NSObject * object in muArray) {
NSLog(@"數組對象:%@", object);
}
[str1 release];
[str2 release];
}
return 0;
}
這時,“字元串”都被去除了。
現在試試 removeObjectIdenticalTo
代碼改成: [muArray removeObjectIdenticalTo:str3];
這是還有一個“字元串”留下來了。
我們用對比兩個對象isEqual,用==對比對象的位址,列印出來了str1 isEqual str2
NSRange rang = NSMakeRange(0, 3);
[muArray removeObject:obj inRange:rang];
指定範圍删除對象,其他方法也可以指定範圍删除,如果對象不在這個範圍内,則不會被删除。
2.3替換某索引值對應的對象
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSObject *obj = [[NSObject alloc]init];
NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];
[muArray addObject:@"對象1"];
[muArray addObject:@"對象2"];
[muArray addObject:@"對象3"];
[muArray addObject:@"對象4"];
[muArray addObject:obj];
for (NSObject * object in muArray) {
NSLog(@"數組對象:%@", object);
}
[muArray replaceObjectAtIndex:4 withObject:@"字元串替換回來"];
for (NSObject * object in muArray) {
NSLog(@"數組對象:%@", object);
}
[obj release];
}
return 0;
}
3、數組疊代的周遊方法
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSObject *obj = [[NSObject alloc]init];
NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];
[muArray addObject:@"對象1"];
[muArray addObject:@"對象2"];
[muArray addObject:@"對象3"];
[muArray addObject:@"對象4"];
[muArray addObject:obj];
NSEnumerator *enmuerator = [muArray objectEnumerator];
id object;
while (object = [enmuerator nextObject]) {
NSLog(@"數組中的對象:%@", object);
}
[obj release];
}
return 0;
}