C數(shù)組主要用于存儲基本數(shù)據(jù)類型 (int, char, float, double...)
,以及復(fù)合數(shù)據(jù)類型(int *, int[6]...)
OC數(shù)組是一個對象,主要用于存儲“對象”累魔,可以存儲不同類型的對象跷敬,數(shù)組分不可變數(shù)組NSArray
和可變數(shù)組NSMutableArray
,數(shù)組中存儲的其實(shí)是每個對象的地址荆秦,并不是真的存儲對象帜矾,所以通常一個對象會被存儲到多個數(shù)組中,但所存儲的對象地址指向的都是同一個對象的內(nèi)存空間势腮,也就是同一個對象
//基礎(chǔ)數(shù)據(jù)類型
char c = 'z';
char cc[] = "1";
int i = 10;
bool d = YES;
NSNumber *obj1 = [NSNumber numberWithChar:c];
NSString *obj2 = [NSString stringWithUTF8String:cc];
NSString *obj3 = [[NSString alloc] initWithBytes:&c length:sizeof(c) encoding:NSUTF8StringEncoding];
NSNumber *obj4 = [NSNumber numberWithInt:i];
NSNumber *obj5 =[NSNumber numberWithBool:d];
//任意類對象
NSObject *obj6 = [[NSObject alloc] init];
NSArray *array = @[obj1, obj2, obj3, obj4, obj5, obj6];
NSLog(@"%@\n",array);
~
打印日志:
(
122,
1,
z,
10,
1,
"<NSObject: 0x1038305f0>"
)
NSArray
NSArray *arr = [[NSArray alloc] init];
[NSArray arrayWithArray:arr];
[NSArray arrayWithObject:@""];
[NSArray arrayWithObjects:@"", nil];
NSString *objs[] = {@""};
[NSArray arrayWithObjects:objs count:1];
//字符串分割
NSString *originStr = @"current string,contain one#two and three,other four";
//以字符串分割
NSArray *separatArr = [originStr componentsSeparatedByString:@" "];
//以字符集合中的字符分割
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@", #"];
NSArray *setArr = [originStr componentsSeparatedByCharactersInSet:set];
NSLog(@"separatArr = %@\nsetArr = %@",separatArr,setArr);
~
打印日志:
separatArr = (
current,
"string,contain",
"one#two",
and,
"three,other",
four
)
setArr = (
current,
string,
contain,
one,
two,
and,
three,
other,
four
)
NSMutableArray
NSMutableArray
繼承自NSArray
她混,所以基本可以使用NSArray
構(gòu)造方法來創(chuàng)建NSMutableArray
對象物臂,不同的是NSMutableArray
可以在原數(shù)組內(nèi)進(jìn)行元素的增
、刪
产上,改
棵磷,查
NSMutableArray *arr = [NSMutableArray array];
[NSMutableArray arrayWithArray:arr];
[NSMutableArray arrayWithObject:@""];
[NSMutableArray arrayWithObjects:@"", nil];
NSString *objs[] = {@""};
[NSMutableArray arrayWithObjects:objs count:1];
NSMutableArray *arr = [NSMutableArray array];
//增
[arr insertObject:@"1" atIndex:0];
[arr addObject:@"2"];
[arr addObjectsFromArray:@[@"3",@"4"]];
//刪
[arr removeObject:@"4"];
[arr removeLastObject];
//改
[arr exchangeObjectAtIndex:0 withObjectAtIndex:1];
[arr replaceObjectAtIndex:0 withObject:@"5"];
//查
[arr objectAtIndex:0];
[arr firstObject];
[arr lastObject];
//重置數(shù)組
[arr setArray:@[@"1",@"2",@"3",@"4"]];
深淺拷貝
Person *obj1 = [[Person alloc] init];
Person *obj2 = [[Person alloc] init];
//當(dāng)把對象加入到數(shù)組里時候,對象的引用計數(shù)默認(rèn)+1
NSArray *arr = [NSArray arrayWithObjects:obj1, obj2, nil];
//flag = NO時為淺拷貝,數(shù)組中的元素(對象)引用計數(shù)+1
NSArray *newArr1 = [[NSArray alloc] initWithArray:arr copyItems:NO];
//flag = YES時為深拷貝晋涣,數(shù)組中的元素(對象)生成副本
NSArray *newArr2 = [[NSArray alloc] initWithArray:arr copyItems:YES];
NSLog(@"arr = %@\nnewArr1 = %@\nnewArr2 = %@",arr,newArr1,newArr2);
~
打印日志:
arr = (
"<Person: 0x100648710>",
"<Person: 0x100646430>"
)
newArr1 = (
"<Person: 0x100648710>",
"<Person: 0x100646430>"
)
newArr2 = (
"<Person: 0x100646600>",
"<Person: 0x100646710>"
)