释放双眼,带上耳机,听听看~!
+ (void)NSArrayCreateMethod
{
// 如果用这种格式,最后不用加nil!
NSArray *array = @[@"one", @"two", @"three"];
NSLog(@"array = %@",array);
QFDog *xiaoBai = [[QFDog alloc] init];
QFDog *xiaoHei = [[QFDog alloc] init];
NSArray *array1 = @[@"one", array, @"two", xiaoBai, xiaoHei];
// 打印数组的时候,NSArray的description方法,是遍历这个数组,对数组里的每个对象,调用他这个对象的description方法。
NSLog(@"array1 = %@",array1);
// 用多个对象,来初始化array2数组 (注意,数组以nil结尾)
NSArray *array2 = [[NSArray alloc] initWithObjects:array, array1, @"one", xiaoBai, nil];
NSLog(@"array2 = %@",array2);
// 对应的加方法, 用多个对象来创建array3
NSArray *array3 = [NSArray arrayWithObjects:@"one", @"two", xiaoBai, xiaoHei, nil];
NSLog(@"array3 = %@",array3);
// 用一个array3数组元素的内容,来初始化array4
NSArray *array4 = [[NSArray alloc] initWithArray:array3];
NSLog(@"array4 = %@",array4);
// 对应的加方法,用array4数组元素的内容,来创建array5
NSArray *array5 = [NSArray arrayWithArray:array4];
NSLog(@"array5 = %@",array5);
// 要注意和如下方法的区别,用array4这个对象,来创建一个array6.
NSArray *array6 = [NSArray arrayWithObject:array4];
NSLog(@"array6 = %@",array6);
}
// NSString, NSArray, NSDictionary 都是由类簇实现的,都不能被继承。
+ (void)NSArraySimpleMethod
{
NSArray *array = @[@"one", @"two", @"three", @"four", @"three"];
// 返回数组元素的个数。
NSLog(@"count1 = %lu",[array count]);
NSArray *array1 = [NSArray arrayWithObjects:@"one", @"two", array, @"four", @"five", @"six", nil];
// nil并不是数组里的元素。
NSLog(@"count2 = %lu",[array1 count]);
// 遍历数组里所有的元素 (类似于C的数组方式)
for (int i=0; i
NSLog(@"array[%d] = %@", i, array1[i]);
}
// 也可以用如下方法取,就等价于array1[3];
// 根据下标,获取数组中得元素
NSString *str = [array1 objectAtIndex:3];
NSLog(@"str = %@",str);
// 注意,数组不能越界访问! (nil 并不是数组的元素)
// str = [array1 objectAtIndex:[array1 count]];
// NSIndexSet 是一个数字的集合类 (里面装的是数字的集合)
// 通过一个range创建一个数字集合, 这个集合有(1,2,3,4)四个数字。
//字符串的截取
NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 4)];
// 根据一个数字集合,返回一个数组。 (获取子数组)
NSArray *subArray = [array1 objectsAtIndexes:indexSet];
NSLog(@"subArray = %@",subArray);
// 根据对象,返回在数组里的索引(数组里存在的第一个索引)
NSLog(@"%lu",[array indexOfObject:@"three"]);
// 根据对象,返回一个range范围内对应的数组的索引
NSLog(@"%lu",[array indexOfObject:@"three" inRange:NSMakeRange(3, 2)]);
// 如果找不到,返回NSNotFound
if ([array indexOfObject:@"123"] == NSNotFound) {
NSLog(@"没有找到");
}
// 将字符串分割成一个数组(字符集合, 字符串)
// 注意,我们分割出来的是不可变数组
// @"" @"Don't" @"" @"trouble" @"" @"trouble" @"" @"or" @"trouble" @"trouble" @"you" @"" @""
NSString *string = @" Don't trouble trouble, or trouble trouble you! ";
// NSCharacterSet 是一个字符集合,这个方法是用一个字符串的字符,来创建一个字符集合。
NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:@", !"];
NSArray *array2 = [string componentsSeparatedByCharactersInSet:cs];
NSLog(@"array2 = %@",array2);
// 剔除空串 NSMutableArray的时候说。
NSString *string1 = @"Give you some color see see";
// 以字符串整体作为分割条件
NSArray *array3 = [string1 componentsSeparatedByString:@" "];
NSLog(@"array3 = %@",array3);
// 将一个字符串的数组,拼接成一个字符串
NSString *string2 = [array3 componentsJoinedByString:@"-"];
NSLog(@"string2 = %@",string2);
NSLog(@"%@",[array2 componentsJoinedByString:@"-"]);
// 数组的枚举,快速枚举
// 枚举器 NSEnumerator
// 数组的方法,创建一个枚举器 (正序的枚举器)
NSEnumerator *e = [array3 objectEnumerator];
// 这个地方,最好写成id obj; 但是因为我们明确知道,这个数组里装的都是字符串,我们也可以写成NSString *obj;
NSString *obj = nil;
// e nextObject 这个方法,会将数组的元素,依次取出,赋值给obj, 直到最后返回nil给obj, 退出循环。
while (obj = [e nextObject]) {
NSLog(@"obj = %@",obj);
}
NSLog(@"---------------");
// 创建一个反序的枚举器
e = [array3 reverseObjectEnumerator];
while (obj = [e nextObject]) {
NSLog(@"obj = %@",obj);
}
// 快速枚举 (用的非常多,非常方便)
// id obj, 相当于定义了一个id类型的obj语句块变量
// for (int i=0; i<....>
// 将array1里的元素,依次赋值给obj,直到nil结束。
for (id obj in array1) {
NSLog(@"obj = %@",obj);
// [NSArray class] 这个方法返回的就是NSArray类的名字。
// NSClassFromString(@"NSArray") 根据字符串返回一个类的名字,返回的就是NSArray
// isMemberOfClass, 是判断obj是否为[NSArray class]类的对象。
// [obj isMemberOfClass:[NSArray class]]
// isKindOfClass, 判断obj是否为NSArray类,或者其子类的对象。
// if ([obj isKindOfClass:[NSArray class]]) {
// if ([obj isKindOfClass:NSClassFromString(@"NSArray")]) {
// continue;
// }
// if ([obj isEqualToString:@"four"]) {
// break;
// }
}
NSLog(@"--------");
// 通过for循环也可以,for循环除了i++,还能i+=2,但是快速枚举,枚举器是无法做到的!
for (int i=0; i
// id obj = [array objectAtIndex:i];
id obj = array[i];
NSLog(@"obj = %@",obj);
}
}