-------
android培训
、
java培训
、期待与您交流!
集合类的总结:
NSArray ArrayList
NSSet HashSet
NSDictionary HashMap
1.NSArray\NSMutableArray
有序
快速创建(不可变):@[obj1,obj2,obj3]
快速访问元素:数组名[i]
2.NSDictionary\NSMutableDictionary
无序
快速创建(不可变):@{key1:value1,key2:value2}
快速访问元素:字典名[key]
3.NSSet\NSMutableSet
无序
#import <Foundation/Foundation.h>
int main()
{
NSArray *persons = @[
@{@"name":@"jack",@"qq":@"123",@"book":@[@"book1",@"book2"]},
@{@"name":@"rose",@"qq":@"1234"},
@{@"name":@"jim",@"qq":@"12345"}
];
//NSDictionary *jim = persons[2];
//取出一本书
NSString *book = persons[0][@"book"][1];
//取出书的数组
NSArray *books = persons[0][@"book"];
NSLog(@"%@",books);
//先取出1位置对应的字典
//再取出字典种qq这个key对应的数据
NSLog(@"%@",persons[1][@"qq"]);
return 0;
}
void use4(){
//字典是无序的
//字典不允许有相同的key,但允许有相同的value(Object)
NSDictionary *dict = @{
@"address" : @"beijing",
@"name" : @"jack",
@"qq" : @"1231231"};
/*
NSArray *keys = [dict allKeys];
for (int i=0; i<dict.count; i++) {
NSString *key = keys[i];
NSString *object = dict[key];
NSLog(@"%@ - %@",key,object);
}
*/
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop){
NSLog(@"%@-%@",key,obj);
//若想遍历一次就停止:
*stop = YES;
}
];
}
void use3(){
/*以下的方法是不行的,因为@{}方式,返回的是不可变的对象,不能给可变对象使用,因为没有set方法。
NSMutableDictionary *dict = @{@"name" : @"jack"};
[dict setObject : @"rose" forKey:@"name"];
*/
}
void use2(){
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"beijing" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];//当再次给key赋值,会覆盖先前的值
//删除
//[dict removeObjectForKey(id)];
NSString *str = dict[@"name"];
NSLog(@"%@",str);
//NSLog(@"%@",dict);//字典打印方式
//NSLog(@"%@",@[@"jack",@"rose"]);//数组打印方式
}
void use(){
/*
字典:
key ---> value
索引 ---> 文字内容
里面存储的内容都是键值对
*/
//第一种
//NSDictionary *dict=[NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//第二种
/*
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
*/
//第三种
/*
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack",@"name",
@"beijing",@"address",
@"234234",@"qq",nil];
*/
NSDictionary *dict = @{@"name" : @"jack",@"address" : @"beijing:"};
//id obj = [dict objectForKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@",obj);
NSLog(@"%ld",dict.count);//返回键值对的个数
}
NSNumber_NSValue
#import <Foundation/Foundation.h>
int main()
{
NSDate *date = [NSDate date];
//打印出的时候是0时区的时间,北京是东8区
NSLog(@"%@",date);
//创建一个比另一个时间晚多少的时间方法:
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];//5秒,不是毫秒
//timeInterval 就是double类型
//返回从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
//[date2 timeIntervalSinceNow];
//日期格式化:
NSDate *date3 = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//y年 M月 d日 H(24)时 h(12)时 m分 s秒
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);
//把字符串格式--->日期格式
NSString *time2 = @"2011^09^12 18:21";
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy^MM^dd HH:mm";
NSDate *date4 = [formatter dateFromString:time2];
NSLog(@"%@",date4);
return 0 ;
}
void testNSDate(){
}
void testNSValue(){
//NSNumber之所以能包装基本类型数据为对象,是因为继承了NSValue
//NSNumber只能包装数字
//NSValue可以包装任何类型
//OC数组种不能存放结构体,此时需要NSValue包装成Value对象
//结构体--->OC对象
CGPoint p = CGPointMake(10, 10);
//结构体--->Value对象
NSValue *value = [NSValue valueWithPoint:p];
//Value对象--->结构体
NSArray *array = @[value];
}
void testNSNumber2(){
//@20 将20包装成一个NSNumber对象
@[
@{@"name":@"jack",@"age":@20},
@{@"name":@"rose",@"age":@10.5},
@{@"name":@"jim",@"age":[NSNumber numberWithInt:20]}
];
//将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A';//NSNumber对象
@"A";//NSString对象
//将age变量包装成NSNumber对象
int age = 100;
@(age);
//[NSNumber numberWithInt:age];
NSNumber *n = [NSNumber numberWithDouble:10.5];
int d = [n doubleValue];//double类型
//一种基本数据类型转换形式
int a = 20;
NSString *str = [NSString stringWithFormat:@"%d",a];
int d2 = [str intValue];
//另一种基本数据类型转换形式
NSLog(@"%d",[@"23" intValue]);
NSLog(@"%d",d2);
}
void testNSNumber(){
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
NSNumber *num2 = dict[@"age"];
int a = [num2 intValue];
NSLog(@"%d",a);
}
NSObject常用方法:
判断是否为aClass或者aClass的子类的实例
- (BOOL)isKindOfClass:(Class)aClass
判断是否为aClass的实例(不包括aClass的子类)
- (BOOL)isMemberOfClass:(Class)aClass
间接调用
[stu performSelector:@selector(test1)];
[stu performSelector:@selector(test2:) withObject:@"abc"];
延迟2秒后调用test2:方法
[stu performSelector:@selector(test2:) withObject:@"abc" afterDelay:2];
反射:
//类名的反射:
NSString *str = @"Person";
Class class = NSClassFromString(str);
Person *person = [[class alloc] init];
//Class变成字符串
NSString *name = NSStringFromClass([Person class]);
//方法的反射
NSString *method = @"test";
SEL selector = NSSelectorFromString(method);
[person performSelector:selector];
//将SEL转换为字符串
NSString *selectorName = NSStringFromSelector(selector);