集合類的總結:
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);