標籤:
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.裝箱拆箱:將基礎資料型別 (Elementary Data Type)轉化為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:
iOS開發_Foundation架構