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

黑马程序员-10Foundation框架(下)

2015-01-21 19:04 495 查看
------- <a href="http://www.itheima.com" target="blank">ios培训</a>、<a href="http://www.itheima.com" target="blank">ios培训</a>、期待与您交流! ----------

(2)NSMutableArray

     NSMutableArray是可变的数组,它继承自NSArray。

     NSMutableArray常用的操作有:

  创建一个可变数组:要以nil结束

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil ];


   向数组中添加元素:

NSMutableArray *array = [NSMutableArray array];
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];

   注意不能添加nil值的元素,因为nil是数组结束的标识。

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


   删除所有元素

[array removeAllObjects];


   删除最后一个元素

[array removeLastObject];


   删除指定的对象  

[array removeObject:@"jack"];


   按照索引删除元素:

[array removeObjectAtIndex:0];


   注意:@[] 只创建不可变数组 ,

   例如:

NSMutableArray *array = @[@"jack", @"rose"]; //错误写法


   右边产生了一个NSArray对象,因此会产生类型不匹配的警告:

Incompatible pointer types initializing 'NSMutableArray *' with an expression of type 'NSArray *'

NSSet和NSMutableSet

(1)NSSet

   NSSet也是一种集合类,

   它与NSArray最大的区别就是:

   NSArray中的元素是有顺序的,因此NSArray中有索引的概念

   NSSet中的元素是没有顺序的。

  创建一个NSSet:

NSSet *s = [NSSet set]; // 永远为空的NSSet
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];

   取出一个元素:

   随机拿出一个元素  

NSString *str =  [s2 anyObject];
NSLog(@"%@", str);

(2)NSMutableSet

    创建NSMutableSet对象

NSMutableSet *s = [NSmutableSet set];


添加元素  

[s addObject:@"hack"];


删除元素

[s removeObject:(id)]; //删除特定元素
[s removeAllObject];//删除所有元素

NSSet和NSArray的对比

 1> 共同点

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

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

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

 2> 不同点

 * NSArray有顺序,NSSet没有顺序

 

NSDictionary和NSMutableDictionary

①NSDictionary常被成为字典,存的都是键值对(不可变)。

字典  

     key ----> value

     索引 ----> 文字内容

创建一个NSDictionary对象

键值对key:@"name":@"jack"

方法一: 

方法:dictionaryWithObject:  forKey:
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

方式二:

有多个键值对时,可以用两个数组分别存放keys和values,

dafc
利用方法:dictionaryWithObjects:  forKeys:

示例

NSArray *keys = @[@"name", @"address"];
NSArray *objs = @[@"jack", @"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys];

方式三:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"jack", @"name", @"北京", @"address", @"123456", @"QQ", nil nil]; // 注意添加结束标识nil


利用Xcode编译器特性,快速创建:@{}

示例;

NSDictionary *dict = @{@"name":@"jack", @"address":@"北京"};


取出一个元素

id obj = [dict objectForKey:@“name”];//取出name对应的值
NSLog(@"%@", obj); // jack

利用编译器特性,取出元素:对象名[key]

obj = dict[@“name”];
NSLog(@"%@", obj); // jack

返回键值对的个数对象名.count

NSLog(@"%ld", dict.count);


注意:

字典不允许有相同的key,但允许有相同的value(Object)

典的无序的

②NSMutableDictionary(可变)

创建一个NSMutableDictionary:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];


添加键值对:setObject方法

// 添加键值对  

[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];

注意:给存在的key赋值,旧值被覆盖

// 给相同的key赋值时 旧值会覆盖  

[dict setObject:@"rose" forKey:@"name"];  //此时的name为rose;


移除键值对:

[dict removeObjectsForKeys:@"name"];


数组和字典的打印:

NSLog(@"%@", @[@"jack",@"rose"]);  // 数组
NSLog(@“%@“,dict}); //字典

输出的结果是:

(
jack,
rose
)
{
address = "\U5317\U4eac";
name = jack;
}

@{}创建的时不可变的字典

//错误写法
NSMutableDictionary *dict = @{@"name":@"jack"};

NSDictionary 的遍历

NSDictionary *dict = @{@"name":@"jack",
@"address":@"北京",
@“qq”:@“888888”};

方法一:比较繁琐,依次取出key和value 

NSArray *keys = [dict allKeys];
for (int i = 0; i <  dict.count; i++)
{
id key = keys[i];
id obj = dict[key];

NSLog(@"%@ = %@", key, obj);
}


方法二:利用block

int i = 0;
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ = %@", key, obj);
/*可以停止打印
if(i == 1)
{*stop = YES;}
*/
}];

字典的数组

NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423",},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];


取出其中的某个字典

NSDictionary *jim = persons[2];
NSLof(@“%@”,jim);

先取出1位置对应的字典,再取出字典中qq这个key对应的数据

NSLog(@"%@", persons[1][@"qq"]);


对集合的总结:

集合:

1.NSArray\NSMutableArray

*有序

*快速创建(不可变):@[obj1, obj2, obj3];

*快速访问元素:数组名[i]

2.NSSet\NSMutableSet

*无序

*无快速创建的方法

3.NSDictionary\NSMutableDictionary

*无序

*快速创建(不可变):@{key1;value1, key2:value2};

*快速访问元素:字典名[key];

NSNumber和NSValue

使用NSNumber和NSValue来包装基本数据类型,让它们转换为对象类型的数据。

①NSNumber

将BOOL、char、int、float、double、NSInteger类型的数据包装成NSNumber类型的对象

示例 

NSNumber *c = [NSNumber numberWithChar:'A'];
NSNumber *i = [NSNumber numberWithInt:10];


将对象转成基本类型

[c charValue];
[i intValue];

将基本类型转成字符串

NSString *str = [NSString stringWithFormat:@“%d”,a]


将字符串转成基本类型

[str intValue];


利用编译器特性:

NSNumber *c = @'A'; // 将A包装成对象
NSNumber *i = @10; // 将10包装成对象

不仅仅如此,还可以这样包装数据:

将age变量包装成NSNumber

int age = 10;
NSNumber *na = @(age);

对NSNumber类型的分析:

NSNumber之所以能包装数据,是因为继承了NSValue ,

NSNumber只能包装数字类型,若要包装结构体就得使用NSValue。

使用NSValue将结构体包装成NSValue类型的OC对象:

将结构体包装成OC对象  

CGPoint p = CGPointMake(10, 10); <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>


// 将结构体转为NSValue  

NSValue *value = [NSValue valueWithPoint:p];


将value转为对应的结构体

[value pointValue];


NSDate类

创建一个时间对象:当前时间

NSDate *date = [NSDate date]; // 默认依据当前时间 <span style="font-family: 宋体; background-color: rgb(255, 255, 255);"> </span>


打印时间:

NSLog(@"%@", date);//打印的为0时区时间(北京-东8区) 

创建一个时间对象:比date晚5秒钟

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

获取从1970年1月1日凌晨走过的秒数:

NSTimeInterval seconds = [date2 timeIntervalSince1970]; // 为double类型

获取date与当前时间的间隔:单位:秒

[date2 timeIntervalSinceNow];

日期格式化类的使用:

使用一:将date对象转为字符串:

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

// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// H(24小时制) h(12小时制)
// y 年  M 月  d 日
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *strDate = [formatter stringFromDate:date];
NSLog(@"%@", strDate);
}

 

使用二:将字符串转为日期:

void stringToDate()
{
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息