NSArray常用用法学习记录

NSArray是不可变的数组。类似于Java中得ArrayList。

NSArray不能包含基本数据类型的值和nil值,只能包含对象。

其子类NSMutableArray和NSArray方法大致相同,只是前者是可变的,因此相同功能的方法大多没有返回值(因为直接改变了NSMutableArray对象)。

//
//  main.m
//  NSArray
//
//  Created by zzqiltw on 14-5-28.
//  Copyright (c) 2014年 zzqiltw. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
/*
    NSArray不可变数组。
    只能包含对象,不能包含基本数据类型如int,也不能包含nil
    以nil作为结束的标志
 */
#pragma mark 创建array
void createArray() {
    // 创建有一个元素的数组
    NSArray *array = [NSArray arrayWithObject:@"haha"];
    NSLog(@"%@", array);
    
    // 创建有多个元素的数组
    array = [NSArray arrayWithObjects:@"hehe", @"heihei", @"xixi", nil];
    NSLog(@"%@", array);
    
    // 计算数组的长度(这里其实是get方法)
    int count = [array count];
    NSLog(@"%i", count);
}

#pragma mark array用法
void useArray() {
    NSArray *array = [NSArray arrayWithObjects:@"hehe", @"heihei", @"xixi", nil];
    
    // 是否包含对象
    if ([array containsObject:@"heihei"]) {
        NSLog(@"包含!");
    } else {
        NSLog(@"不包含!");
    }
    
    // 得到最后一个对象
    NSString *last = [array lastObject];
    NSLog(@"最后一个对象是: %@", last);
    
    // 获取第i个元素
    NSString *str = [array objectAtIndex:1];
    NSLog(@"%@", str);
    
    // 查找元素,返回索引
    int i = [array indexOfObject:@"heihei"];
    NSLog(@"%i", i);
}

#pragma mark array内存管理(把对象塞进数组它的引用计数器会加1)
void arrayMemory() {
    Student *s1 = [[Student alloc] init];
    NSLog(@"%zi", [s1 retainCount]);
    Student *s2 = [[Student alloc] init];
    Student *s3 = [[Student alloc] init];
    
    //把对象塞进数组它的引用计数器会加1, array会对它retain一次
    NSArray *array = [[NSArray alloc] initWithObjects:s1, s2, s3, nil];
    NSLog(@"%zi", [s1 retainCount]);
    
    // array释放时里面所有的对象都会被release一次
    [array release];
    NSLog(@"%zi", [s1 retainCount]);
    
    [s1 release];
    NSLog(@"%zi", [s1 retainCount]);
    
    [s2 release];
    [s3 release];
    
}

#pragma mark 给数组里的每一个对象发相同消息
void arrayMessage() {
    Student *s1 = [Student student];
    Student *s2 = [Student student];
    Student *s3 = [Student student];
    
    NSArray *array = [NSArray arrayWithObjects:s1, s2, s3, nil];
    
    // 给里面的所有对象调用相同方法。(省去遍历)
    [array makeObjectsPerformSelector:@selector(test)];
    [array makeObjectsPerformSelector:@selector(test2:) withObject:@"hhh"];
    
}

#pragma mark - 遍历数组
void travelArray1() {
    Student *s1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:s1, @"aaa", @"bbb", @"ccc", nil];
    
    int count = [array count];
    for (int i = 0; i < count; ++i) {
        id obj = [array objectAtIndex:i];
        NSLog(@"%i:%@", i, obj);
    }
}

void travelArray2() {
    Student *s1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:s1, @"aaa", @"bbb", @"ccc", nil];
    // foreach遍历
    for (id obj in array) {
        NSLog(@"%zi----%@", [array indexOfObject:obj], obj);
    }
}

void travelArray3() {
    Student *s1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:s1, @"aaa", @"bbb", @"ccc", nil];
    // 代码块block遍历(推荐)
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%zi=%@", idx, obj);
        if (idx == 2) {
            // 表示停住
            *stop = true;
        }
    }];
}

void travelArray4() {
    Student *s1 = [Student student];
    NSArray *array = [NSArray arrayWithObjects:s1, @"aaa", @"bbb", @"ccc", nil];
    // 迭代器遍历
    NSEnumerator *enumerator = [array objectEnumerator];
    id obj = nil;
    while ((obj = [enumerator nextObject]) != nil) {
        NSLog(@"%i->%@", [array indexOfObject:obj], obj);
    }
    
}
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
//        createArray();
//        useArray();
//        arrayMemory();
//        arrayMessage();
//        travelArray1();
//        travelArray2();
//        travelArray3();
        travelArray4();
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值