#import <Foundation/Foundation.h>
#import "Student.h"
#pragma mark 建立一個數組
void arrayCreate() {
// 建立一個空的數組
NSArray *array = [NSArray array];
// 建立有1個元素的數組
array = [NSArray arrayWithObject:@"123"];
// 建立有多個元素的數組
array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
int count = [array count];
// count = array.count;
NSLog(@"%i", count);
}
#pragma mark 數組的簡單使用
void arrayUse() {
NSObject *obj = [[NSObject alloc] init];
NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c" , obj, nil];
// 判斷是否包含了某個元素
if ([array containsObject:@"a"]) {
NSLog(@"包含了字元串a");
}
NSString *last = [array lastObject];
NSLog(@"last=%@", last);
NSString *str = [array objectAtIndex:1];
NSLog(@"%@", str);
int index = [array indexOfObject:@"c"];
NSLog(@"index=%i", index);
[obj release];
}
#pragma mark 數組的記憶體管理
void arrayMemory() {
// 1
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init];
NSLog(@"stu1:%zi", [stu1 retainCount]);
// 當把一個對象塞進數組中時,這個對象的計數器會加1,也就是說數組會對它做一次retain操作
// 2
NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
NSLog(@"stu1:%zi", [stu1 retainCount]);
NSLog(@"count=%zi", array.count);
// 1
[stu1 release];
[stu2 release];
[stu3 release];
// 數組被銷毀的時候,會對内部的所有元素都做一次release操作
// 0
[array release];
}
#pragma mark 給數組裡面的元素發送消息
void arrayMessage() {
Student *stu1 = [Student student];
Student *stu2 = [Student student];
Student *stu3 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
// 讓數組裡面的所有對象都調用test方法
// [array makeObjectsPerformSelector:@selector(test)];
[array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
}
#pragma mark 周遊數組1
void arrayFor1() {
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
int count = array.count;
for (int i = 0; i<count; i++) {
// id == void *
id obj = [array objectAtIndex:i];
NSLog(@"%i-%@", i, obj);
}
}
#pragma mark 周遊數組2
void arrayFor2() {
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// 快速周遊
int i =0;
for (id obj in array) {
NSLog(@"%i-%@", i, obj);
i++;
}
}
#pragma mark 周遊數組3
void arrayFor3() {
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%i-%@", idx, obj);
// 如果索引為1,就停止周遊
if (idx == 1) {
// 利用指針修改外面BOOL變量的值
*stop = YES;
}
}];
}
#pragma mark 周遊數組4
void arrayFor4() {
Student *stu1 = [Student student];
NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// 擷取數組的疊代器
// NSEnumerator *enumerator = [array objectEnumerator];
// 反序疊代器(從尾部開始周遊元素)
NSEnumerator *enumerator = [array reverseObjectEnumerator];
// allObjects是取出沒有被周遊過的對象
NSArray *array2 = [enumerator allObjects];
NSLog(@"array2:%@", array2);
// 擷取下一個需要周遊的元素
id obj = nil;
while (obj = [enumerator nextObject]) {
NSLog(@"obj=%@", obj);
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
arrayFor4();
}
return 0;
}