1.Foundation是框架的基础,和UI无关;UIKit是基础的UI类库
2.常用结构体:NSStringFromRange ;NSStringFromPoint;NSStringFromSize;NSStringFromRect;均不是oc对象,存到数组时需转化为NSValue;
3.NSDate:字符串转化为日期时,转化后的日期是字符串的日期-8H;
4.1.NSString:NSString *[email protected]"OC string";//ObjC字符串需要加@,并且这种方式创建的对象不需要自己释放内存;
4.2.NSComparisonResult result2= [@"abc" compare:@"aBc"];//如果是[@"abc" caseInsensitiveCompare:@"aBc"]则忽略大小写比较
4.3.NSRange range=[@"abcdefabcdef" rangeOfString:@"cde"];//注意如果遇到cde则不再往后面搜索,如果从后面搜索或其他搜索方式可以设置第二个options参数
4.4.1.文件写入:[str11 writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:&error1];//automically代表一次性写入,如果写到中间出错了最后就全部不写入
4.4.2.路径操作:http://www.cnblogs.com/kenshincui/p/3885689.html
4.5可变字符串:注意虽然initWithCapacity分配字符串大小,但是不是绝对的不可以超过此范围,声明此变量对性能有好处
5.1.[array2 makeObjectsPerformSelector:@selector(showMessage:) withObject:@"Hello,world!"];//执行所有元素的showMessage方法,后面的参数最多只能有一个
5.2.
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"method3:index %zi is %@",idx,obj); if(idx==2){//当idx=2时设置*stop为YES停止遍历 *stop=YES; } }];
5.3.排序:
//方法4 通过描述器定义排序规则 Person *person4=[Person personWithName:@"Jack"]; Person *person5=[Person personWithName:@"Jerry"]; Person *person6=[Person personWithName:@"Tom"]; Person *person7=[Person personWithName:@"Terry"]; NSArray *array6=[NSArray arrayWithObjects:person4,person5,person6,person7, nil]; //定义一个排序描述 NSSortDescriptor *personName=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; NSSortDescriptor *accountBalance=[NSSortDescriptor sortDescriptorWithKey:@"account.balance" ascending:YES]; NSArray *des=[NSArray arrayWithObjects:personName,accountBalance, nil];//先按照person的name排序再按照account的balance排序 NSArray *array7=[array6 sortedArrayUsingDescriptors:des]; NSLog(@"%@",array7); /*结果: ( "name=Jack", "name=Jerry", "name=Terry", "name=Tom" ) */
6.装箱拆箱:将基本数据类型转化为oc对象成为装箱;反之成为拆箱;NSNumber不能接收结构体,NSValue可以。
6.1.对自定义结构体的装箱拆箱:
typedef struct { int year; int month; int day; } Date; //NSNumber是NSValue的子类,而NSValue可以包装任何类型,包括结构体 void test1(){ //如果我们自己定义的结构体包装 Date date={2014,2,28}; char *[email protected](Date); NSValue *value3=[NSValue value:&date withObjCType:type];//第一参数传递结构体地址,第二个参数传递类型字符串 NSArray *array2=[NSArray arrayWithObject:value3]; NSLog(@"%@",array2); /*结果: ( "<de070000 02000000 1c000000>" ) */ Date date2; [value3 getValue:&date2];//取出对应的结构体,注意没有返回值 //[value3 objCType]//取出包装内容的类型 NSLog(@"%i,%i,%i",date2.year,date2.month,date2.day); //结果:2014,2,28 }
7.NSNull:我们有时候确实想在数据或字典中存储nil值而不是作为结束标记怎么办呢?这个时候需要使用NSNull,这个类是一个单例,只有一个null方法
[email protected]作为字面量可以装箱
9.反射:
9.1:[person1 isKindOfClass:[NSObject class]]//判断一个对象是否为某种类型(如果是父类也返回YES)
9.2:[person1 isMemberOfClass:[NSObject class]]//判断一个对象是否是某个类的实例化对象,结果:0
9.3动态生成一个类:
//动态生成一个类 NSString *[email protected]"Person"; Class myClass=NSClassFromString(className);//根据类名生成类 Person *person2=[[myClass alloc]init]; //实例化 [email protected]"Kaoru"; NSLog(@"%@",person2);//结果:name=Kaoru //类转化为字符串 NSLog(@"%@,%@",NSStringFromClass(myClass),NSStringFromClass([Person class])); //结果:Person,Person //调用方法 NSString *[email protected]"showMessage:"; SEL mySelector=NSSelectorFromString(methodName); Person *person3=[[myClass alloc]init]; [email protected]"Rosa"; [person3 performSelector:mySelector withObject:@"Hello,world!"]; //结果:My name is Rosa,the infomation is "Hello,world!". //方法转化为字符串 NSLog(@"%@",NSStringFromSelector(mySelector)); //结果:showMessage: