您的位置:首页 > 职场人生

黑马程序员——Foundation框架:字符串之集合类

2015-04-27 23:21 477 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、NSArray

#import <Foundation/Foundation.h>
#import "Person.h"

/*

NSArray :不可变数组

NSMutableArray : 可变数组
*/

int main()
{
// @[] 只创建不可变数组NSArray
/* 错误写法
NSMutableArray *array = @[@"jack", @"rose"];

[array addObject:@"jim"];
*/

//NSArray *array = @[@"jack", @"rose"];

return 0;
}

// 可变数组的基本使用
void use3()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

// 添加元素
[array addObject:[[Person alloc] init]];

[array addObject:@"jack"];

// 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];

// 错误写法
// [array addObject:nil];

NSLog(@"%@", array);

NSLog(@"%ld", array.count);
}

// 遍历数组
void use2()
{
Person *p = [[Person alloc] init];

NSArray *array = @[p, @"rose", @"jack"];

//    for (int i = 0; i<array.count; i++)
//    {
//        NSLog(@"%@", array[i]);
//    }

// id obj代表着数组中的每一个元素
//int i = 0;
//    for (id obj in array)
//    {
//        // 找出obj元素在数组中的位置
//        NSUInteger i = [array indexOfObject:obj];
//
//        NSLog(@"%ld - %@", i, obj);
//        //i++;
//
//        if (i==1)
//        {
//            break;
//        }
//    }

[array enumerateObjectsUsingBlock:

// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);

if (idx == 0)
{
// 停止遍历
*stop = YES;
}

}];

//    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
//    {
//        NSLog(@"%ld - %@", idx, obj);
//
//
//        if (idx == 0)
//        {
//            // 停止遍历
//            *stop = YES;
//        }
//    };
//
//    for (int i = 0; i<array.count; i++)
//    {
//        // 用来标记是否需要停止遍历
//        BOOL isStop = NO;
//
//        // 取出元素
//        id obj = array[i];
//
//        myblock(obj, i, &isStop);
//
//
//        if (isStop)
//        {
//            break;
//        }
//    }

}

void use()
{
/*
int a = 5;

int ages[10] = {1, 90, 89, 17};

Person *p = [[Person alloc] init];
Person *persons[5] = {p,  [[Person alloc] init]};
*/

// OC数组不能存放nil值
// OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

// 这个array永远是空数组
// NSArray *array = [NSArray array];

/*
1.NSArray的创建
*/
NSArray *array2 = [NSArray arrayWithObject:@"jack"];

// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];

//NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];

// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];

/*
2.NSArray的元素个数
*/
NSLog(@"%ld", array3.count);

/*
3.NSArray中元素的访问
*/
NSLog(@"%@", [array3 objectAtIndex:1]);

//array3[1];
NSLog(@"%@", array3[0]);
}


总结:NSArray定义的是一个不可变的数组,而NSMutableArray定义的是一个可以改变的数组。数组中可以存放任何的oc对象,但是基本数据类型不能放到数组中。

二.NSSet

#import <Foundation/Foundation.h>

int main()
{
NSMutableSet *s = [NSMutableSet set];

// 添加元素
[s addObject:@"hack"];

// 删除元素
// [s removeObject:<#(id)#>];
return 0;
}

// set的基本使用
void test()
{
NSSet *s = [NSSet set];

NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];

// 随机拿出一个元素
NSString *str =  [s2 anyObject];

NSLog(@"%@", str);

//NSLog(@"%ld", s2.count);
}


总结: NSSet和NSArray的对比:

1> 共同点

* 都是集合,都能存放多个OC对象

* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

* 本身都不可变,都有一个可变的子类

2> 不同点

* NSArray有顺序,NSSet没有顺序

三、NSDictionary/NSDMutableDictionary

//创建一个字典对象,不可变
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
id obj = [dic objectForKey:@"name"];  //查找对象

//快速创建字典方式,注意字典中的对象也是无序的
NSDictionary *dic1 = @{@"name":@"jack", @"address":@"北京"};
id obj1 = dic[@"name"]; //快速提取对象

//创建一个可改变的字典
NSMutableDictionary *dic2 = [NSMutableDictionary dictionary];
[dic2 setObject:@"jack" forKey:@"name"]; //添加字典内容
[dic2 removeObjectForKey:@"name"]; //删除字典元素

总结:在NSDictionary中存储的都是键值对。对应关系为:索引->文字内容, key->value。

四、NSData

#import <Foundation/Foundation.h>

int main()
{
// 09/10/2011
NSString *time = @"2011/09/10 18:56";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";

NSDate *date = [formatter dateFromString:time];
NSLog(@"%@", date);
return 0;
}

void date2string()
{
NSDate *date = [NSDate date];

// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

// y 年  M 月  d 日
// m 分 s 秒  H (24)时  h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSString *str = [formatter stringFromDate:date];

NSLog(@"%@", str);
}

void use()
{
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date);

NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];

// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];

// [date2 timeIntervalSinceNow];
}


总结:Foundation框架中的字符串主要包含NSString,集合类(NSArray,NSSet,NSDictionary,NSDate,NSObject)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息