//
// main.m
// Foundation(6)-NSArray
//
// Created by XinYou on 15-1-19.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import
#import "Student.h"
#pragma mark 创建数组
void arrayCreate(){
// 创建一个空的数组
NSArray *array = [NSArray array];
// 创建有一个元素的数组
array = [NSArray arrayWithObject:@"123"];
// 创建有多个元素的数组,"nil"表示数组的结尾,它并不是数组的元素
array = [NSArray arrayWithObjects:@"abc", @"123", @"hello", nil];
int count = [array count];
NSLog(@"%i", count);// 3
}
#pragma mark 数组的简单使用
void arrayUse(){
NSObject *obj = [[NSObject alloc] init];
NSArray *array = [NSArray arrayWithObjects:@"abc", @"123", @"hello", obj, nil];
// 判断是否包含了某个元素
if ([array containsObject:@"abc"]) {
NSLog(@"array包含了字符串abc");
}
// 获取数组的最后一个元素
NSString *last = [array lastObject];
NSLog(@"last = %@", last);// last =
// 获取数组某个位置的元素
NSString *str = [array objectAtIndex:1];
NSLog(@"str = %@", str);// str = 123
// 获取数组中某个元素的索引下标
int index = [array indexOfObject:@"abc"];
NSLog(@"index = %i", index);// index = 0
[obj release];
}
#pragma mark 数组的内存管理
void arrayMemory(){
// 调用静态方法获取Student对象
Student *stu1 = [Student student];
Student *stu2 = [Student student];
Student *stu3 = [Student student];
NSLog(@"stu1的计数器:%zi", [stu1 retainCount]);// stu1的计数器:1
// 当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对这个对象做一次retain操作
NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
NSLog(@"stu1的计数器:%zi", [stu1 retainCount]);// stu1的计数器:2
NSLog(@"%zi", [array count]);// [array count] 等效于 array.count
// 数组被销毁时,会对内部的所有元素都做一次release操作
[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)];
// 打印结果:
// 调用了
的test方法
// 调用了
的test方法
// 调用了
的test方法 // 让数组中得所有对象都调用test2:方法,注意这里的冒号 [array makeObjectsPerformSelector:@selector(test2:) withObject:@"hello"]; // 打印结果 // 调用了
的test2方法,参数str = hello // 调用了
的test2方法,参数str = hello // 调用了
的test2方法,参数str = hello } int main(int argc, const char * argv[]) { @autoreleasepool { // arrayCreate(); // arrayUse(); // arrayMemory(); // arrayMessage(); } return 0; }
//
// Student.h
// Foundation(6)-NSArray
//
// Created by XinYou on 15-1-19.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import
@interface Student : NSObject
+ (id)student;
- (void)test;
- (void)test2:(NSString*)str;
@end
//
// Student.m
// Foundation(6)-NSArray
//
// Created by XinYou on 15-1-19.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "Student.h"
@implementation Student
+ (id)student{
return [[[Student alloc] init] autorelease];
}
- (void)test{
NSLog(@"调用了%@的test方法", self);
}
- (void)test2:(NSString *)str{
NSLog(@"调用了%@的test2方法,参数str = %@", self, str);
}
- (void)dealloc{
NSLog(@"%@被销毁了", self);
[super dealloc];
}
@end