黑马程序员-OC笔记(七)集合类 NSNumber、NSValue NSDate
来源:互联网 发布:巨人网络小怪兽工作室 编辑:程序博客网 时间:2024/06/05 01:04
一、 集合类
1> NSArray\NSMutableArray
*有序
*快速创建(不可变):@[obj1,obj2]
*快速访问元素:数组名[i]
2> NSSet\NSMutableSet
*无序
3>NSDictionary\NSMutableDictionary
*无序
*快速创建(不可变):@{key1 : value1, key2 : value2}
*快速访问元素:字典名[key]
4> NSArray 和NSSet对比
a> 共同点
*都是集合,都能存放多个OC对象
*只能存放OC对象,不能存放非OC对象(基本数据类型:int、char、float等,结构体,枚举)
*本身都不可变,都有一个可变的子类
b>不同点
*NSArray是有序的,NSSet是无序的
a、 NSArray
NSArray : 不可变数组
NSMutableArray : 可变数组
NSArray
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc,constchar * argv[])
{
/*
// @[] 只创建不可变数组NSArray
// 错误写法
NSMutableArray *array =@[@"jack",@"rose"];
[array addObject:@"jim"];
*/
return 0;
}
void NSArrayUse()
{
/*
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 = [NSArrayarrayWithObject:@"jack"];
//nil是数组元素结束的标记
NSArray *array3 = [NSArrayarrayWithObjects:@"jack",@"rose",nil];
// NSArray *array4 = [NSArrayarrayWithObjects:@"jack",@"rose",@"he", nil]; ==
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"rose",@"he"];
/*
2、NSArray的元素个数
*/
// [array2 count]; == array2.count;
NSLog(@"%ld",array2.count);
/*
3、NSArray中元素的访问
*/
NSLog(@"%@",[array3objectAtIndex:0]);// == array3[0]
// 编译器特性
NSLog(@"%@",array4[1]);//使用这种方式
}
// 遍历数组
void Use()
{
Person *p = [[Personalloc]init];
NSArray *array = @[p,@"jack",@"sfxc"];
// for (inti=0; i<array.count; i++) {
// NSLog(@"%@",array[i]);
// }
// idobj代表着数组中的每一个元素
for (idobjin array)
{
// 找出obj元素在数组中的位置
NSUIntegeri = [array indexOfObject:obj];
NSLog(@"%ld--%@",i,obj);
if (i == 1)
{
break;
}
}
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
[array enumerateObjectsUsingBlock:^(idobj,NSUIntegeridx,BOOL *stop) {
NSLog(@"%ld--%@",idx, obj);
if (idx == 1) {
// 停止遍历
*stop = YES;
}
}];
/*
enumerateObjectsUsingBlock的本质:
void (^myBlock)(id, NSUInteger, BOOL *) =^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld--%@", idx, obj);
if (idx == 1) {
// 停止遍历
*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 user1()
{
//NSMutableArray *array =[NSMutableArray array];
NSMutableArray *array =[NSMutableArrayarrayWithObjects:@"rose",@"jim",nil];
// 添加元素
[array addObject:[[Personalloc]init]];
[array addObject:@"jack"];
// 删除所有元素元素
// [array removeAllObjects];
// 删除指定对象
[array removeObject:@"jack"];
[array removeObjectAtIndex:1];
NSLog(@"%@",array);
NSLog(@"%ld",array.count);
// 错误写法
// [array addObject:nil];
}
NSSet
#import <Foundation/Foundation.h>
int main(int argc,constchar * argv[])
{
NSMutableSet *s = [NSMutableSetset];
// 添加元素
[s addObject:@"back"];
// 删除元素
[s removeObject:@"back"];
return 0;
}
// set的基本使用
void test()
{
// 创建一个空的set
//NSSet *s = [NSSet set];
NSSet *s1 = [NSSetsetWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2",nil];
// 随机拿出一个元素
NSString *str = [s1 anyObject];
NSLog(@"%ld",s1.count);
NSLog(@"%@",str);
}
NSDictionary
#import <Foundation/Foundation.h>
int main(int argc,constchar * argv[])
{
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典是无序的
NSDictionary*dict2 = @{
@"name": @"jack",
@"address":@"北京",
@"qq":@"78834253",
@"name1": @"jack",
@"name2": @"jack"
};
NSArray *keys = [dict2 allKeys];
//NSLog(@"%@",keys);
for (inti =0;i<dict2.count; i++) {
NSString *key = keys[i];
NSString *object =dict2[key];
NSLog(@"%@ = %@",key, object);
}
[dict2 enumerateKeysAndObjectsUsingBlock:
^(id key, idobj,BOOL *stop) {
NSLog(@"%@ = %@",key, obj);
// *stop = YES;
}];
return 0;
}
void test()
{
/*
字典:
key ---> value
索引 --->文字内容
里面存储的东西都是键值对
*/
// NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionarydictionaryWithObjects:objectsforKeys:keys];
NSDictionary*dict1 = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京",@"address",
@"3243434", @"qq"
, nil];
NSDictionary*dict2 = @{@"name": @"jack",@"address":@"北京"};//定义用这个
id obj = [dict objectForKey:@"name"];
id obj1 = [dict1 objectForKey:@"qq"];
id obj2 = dict2[@"name"];
NSLog(@"%@",obj);
NSLog(@"%@",obj1);
NSLog(@"%@",obj2);
// 返回的是键值对的个数
NSLog(@"%ld",dict2.count);
/*
// 错误代码
NSMutableDictionary *dict =@{@"name":@"jack"};
[dict setObject:@"北京"forKey:@"address"];
*/
}
void test2()
{
NSMutableDictionary *dict =[NSMutableDictionarydictionary];
// 添加键值对
[dict setObject:@"jack"forKey:@"name"];
[dict setObject:@"北京"forKey:@"address"];
// 将以前的key为@"name"的覆盖
[dict setObject:@"rose"forKey:@"name"];
// 移除键值对
// [dict removeObjectForKey:@"address"];
id obj = dict[@"name"];
NSLog(@"%@",obj);
NSLog(@"%@",dict);
}
void test3()
{
NSArray *person = @[
@{@"name":@"jack",@"qq":@"78834253",@"books":@[@"5分钟突破IOS编程",@"5分钟突破android编程"]},
@{@"name":@"rose",@"qq":@"534234"},
@{@"name":@"jim",@"qq":@"3425234"},
@{@"name":@"jake",@"qq":@"4634352455"}
];
NSDictionary*jim = person[2];
NSLog(@"%@",jim);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
NSLog(@"%@",person[1][@"qq"]);
NSLog(@"%@",person[0][@"books"][0]);
NSArray *array = person[0][@"books"];
NSLog(@"%@",array);
}
二、 NSNumber和NSValue
NSNumber 之所以能包装基本数据类型为对象,是因为继承了NSValue
#import <Foundation/Foundation.h> int main(int argc,constchar * argv[]){ // 将结构体包装成 OC对象 CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValuevalueWithPoint:p]; NSArray *array = @[value]; // 将value转为对应的结构体 CGPoint pp = [value pointValue]; return 0;} voidNSNumberTest(){ NSNumber*num =[NSNumbernumberWithInt:10]; NSDictionary*person = @{ @"name" : @"jack", @"age" : num }; NSNumber*num2 = person[@"age"]; int age =[num2 intValue]; NSLog(@"%d",age);} voidNSNumberTest2(){ NSNumber*num = [NSNumbernumberWithDouble:10.5]; double d = [num doubleValue]; int a = 20; NSString *str = [NSStringstringWithFormat:@"%d",a]; int b = [str intValue]; NSLog(@"%.1f--%d",d, b); //@20 将20包装成一个NSNumber对象 // 将各种数据类型包装成NSNumber对象 //@10.5 // @'A' NSNumber对象 @"A" NSString对象 //@YES NSArray *array = @[ @{@"name" :@"jack", @"age": [NSNumbernumberWithInt:20]}, @{@"name" :@"rose", @"age":@20}, @{@"name" :@"jim", @"age":@25}, @{@"name" :@"jake", @"age":@18}, ]; // 将age变量包装成NSNumber对象 int age = 100; @(age);// @age;是错误的}
三、NSDate
#import <Foundation/Foundation.h> int main(int argc,constchar * argv[]){ NSString *time = @"2011/09/1018:56"; NSDateFormatter *formatter =[[NSDateFormatteralloc] init]; formatter.dateFormat = @"yyyy/MM/dd HH:mm"; NSDate *date =[formatter dateFromString:time]; NSLog(@"%@",date); return 0;}void test(){ // 创建一个时间对象 NSDate *date = [NSDatedate]; // 打印出的是0时区的时间 (北京-东8区) NSLog(@"%@",date); NSDate *date2 = [NSDatedateWithTimeInterval:60*60*8sinceDate:date]; NSLog(@"%@",date2); // 从1970开始走过的秒数 NSTimeInterval second =[date2 timeIntervalSince1970]; NSLog(@"%.2f",second); NSTimeInterval second2 = [date2timeIntervalSinceNow]; NSLog(@"%.2f",second2);} void date2string(){ NSDate *date = [NSDatedate]; // 日期格式化类 NSDateFormatter *formatter = [[NSDateFormatteralloc] init]; // y 年 M月 d 日 H 时 m分 s 秒 H (24)时 h (12)时 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *str = [formatter stringFromDate:date]; NSLog(@"%@",str);}
- 黑马程序员-OC笔记(七)集合类 NSNumber、NSValue NSDate
- 黑马程序员--oc:NSString、NSValue、NSNumber、NSDate
- 黑马程序员---Foundation常用类(NSNumber、NSValue、NSDate)
- 黑马程序员 OC语言 - 9 NSDictionary、NSMutableDictionary、NSNumber、NSDate、NSValue
- 黑马程序员 oc随记 NSNumber、NSValue与NSDate
- 黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员-OC学习笔记-----Foundation框架(集合、NSNumber、NSDate)
- 黑马程序员--OC自学笔记---10Foundation、NSFileManager、iOS沙盒、OC结构体、NSNumber、NSValue、NSDate、copy、单例模式
- 黑马程序员_Foundation_NSSet,NSDictionary,NSValue,NSDate,NSNumber
- 黑马程序员一NSNumber, NSDate,NSValue
- 黑马程序员----OC学习笔记之NSNumber和NSValue
- ——黑马程序员——OC中NSNumber、NSValue、NSDate 的使用总结
- oc -13 NSNumber NSValue NSDate
- OC学习笔记之Foundation框架NSNumber、NSValue和NSDate
- 黑马程序员——foundation框架之NSNumber,NSDate,NSValue
- 黑马程序员_Foundation学习之NSSet、NSDictionary、NSNumber、NSValue、NSDate
- 黑马程序员——Foundation---NSSet,NSDictionary,NSNumber,NSDate,NSValue
- 飞地方你哦烦恼丝烦恼少烦恼少烦恼所发生的放开手
- Java基础回顾_深入OOP常见错误精髓
- 山西两名副省级高官
- eclipse maven plugin 插件 安装 和 配置
- HTTP和FTP的区别
- 黑马程序员-OC笔记(七)集合类 NSNumber、NSValue NSDate
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- javascript中字符串操作注意事项
- android 环境配置
- 常用的 DOCTYPE 声明
- mysqldump报错及解决
- 细化 TLS原理及分类
- 广州日报社长举报纪委书记
- xml序列化