------
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];
}