Objective-C學習基礎筆記是本文要介紹的內容,Cocoa由兩個架構構成:Foundation Kit和Application Kit。Application包括所有使用者介面對象和進階類;Foundation架構中包括面向資料的低級類和資料種類,具有100多個類,例如NSString,NSArray,NSEnumerator,NSNumber等。相干文檔儲藏於/Developer/ADC Reference Library/documentation/index.html中。
1.常用資料種類
- typedef struct _NSRange{
- unsigned int location;
- unsigned int length;
- }NSRange;
表示相干事物的範圍,例如字串中字元範圍可能數組中元素範圍等。location是範圍的起始位置,length元素個數。
創立措施:
- NSRange range; range.location = 1; range.length = 4;
- NSRange range = {1,4}; //C語言的彙總構造賦值機制
- NSRange range = NSMakeRange(1,4); //能夠在能夠利用函數的任何地方調用NSMakeRange。
- typedef struct _NSPoint{
- float x; float y;
- }NSPoint;
- typedef struct _NSSize{
- float width; float height;
- }NSSize;
- typedef struct _NSRect{
- NSPoint origin; NSSize size;
- }NSRect;
NSRect是一個矩形資料種類,NSPoint是起始點,NSSize儲存長度和寬度。 NSMakeRect() NSMakePoint().
這些常用的資料種類是C的struct而不是對象,在許多過程例如GUI過程)中有許多臨時的點,大小和矩形去告終工作,所有的Objective-C對象都是動態分配的,這麼是一個代價較高的壟斷,必需許多工夫。
2.字串
Cocoa處理字串的類NSString和它的子類NSMutableString。
- +(id)stringWithFormat:(NSString *)format,...;
指能夠接受以逗號離別的多個參數。+指該措施為類措施,是屬於類對象。Obj-C在出產一個類的時候會創立一個代表類的類對象,包括指向超類的指標,類名和指向類措施列表的指標。還包括一個long資料nanjianyan.com,為新創立的類執行個體對象指定大小。-來開始聲明的為執行個體措施,這些執行個體措施可能在某個對象執行個體中運行。萬一某措施用來告終慣例功能例如創立一個執行個體對象可能拜會一些大局類資料,等閑聲明為類措施。
-(unsigned int)length; 它能夠準確處理國際字串。中文,日文以及用Unicode國際字元規範的字串。而在C中處理這些國際字串很繁瑣,因為一個字元挪借空間肯那個多於一個位元組,strlen()只計算位元組數的函數等閑不行。
-(BOOL)isEqualtoString:(NSString *)str; 而==計算符只推斷兩個字串指標數值,未曾推斷他們所指向的對象。
- -(NSComparisonResult)compare:(NSString *)str options:(unsigned)mask;
NSComparisonResult是一個enum型資料
- typedef enum _NSComparisonResult{
- NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending
- }NSComparisonResult;
options是一個位元遮罩,能夠用位或|來加選項符號。NSCaseInsensitiveSearch不判別大小寫字元,NSLiteralSearch判別大小寫,NSNumericSearch比起字串字元個數。
- NSString *str1 = @"hello 1 world";
- NSString *str2;
- str2 = [NSString stringWithFormat:@"hello %d world",1];
- if([str1 compare:str2
- options:NSCaseInsensitiveSearch | NSNumericSearch]
- == NSOrderedSame)
- {}
NSString一旦創立了就不能改換。能夠用它產生新的字串,尋找字元可能比擬。然而不能剔除可能增加字元。可變的類NSMutableString是NSString的子類。它們是在一個.h檔案中。
- +(id)stringWithCapacity:(unsigned)capacity;
創立一個capacity容量的字串。先預分配一塊記憶體儲存它,後續的壟斷速度會快許多。當然也能夠用它父類NSString的類措施和執行個體措施都能夠利用。
- NSMutableString *friends;
-
- friends = [NSMutalbeString stringWithCapacity:50];
- [friends appendString:@"James lilei lucy"]; //增加字串到對象末路
-
- NSRange range;
- range = [friends rangeOfString:@"lilei"]; //尋找str2在str1中的範圍
-
- range.length++;
- [friends deleteCharactersInRange:(NSRange)range]; //穿越範圍剔除字元
3.聚集
- NSArray,NSMutalbeArray,NSEnumerator,NSDictionary
NSArray類是一個儲存物件的有序列表。只儲存Objective-C對象不儲存C中大約資料種類int,float,enum,struct)可能NSArray中隨即指標。同時也不儲存nil對象的零值可能NULL值)。
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"three",nil];do1k.com是以nil結尾的。這即便不能儲存nil的起因之一。
- for(int i=0;i<[array count];i++){NSLog(@"index %d has %@", i, [array objectAtIndex:i]);}
-(unsigned)count;包括對象個數。-(id)objectAtIndex:(unsigned int)index;獲得特定索引處的對象。
失常處理:
萬一index大於數組對象個數:Terminating app due to uncaught exception 'NSRangeException' reason:'...',有眾多捉拿失常並處理的重複。
CF:Core Foundatin架構利用,與Cocoa架構一樣,然而用C語言告終。CF中的對象和Cocoa對象直接是免費橋接的,能夠互換利用。
切分數組:
Perl可能Python中適應於將字串切分成數組和將數組元素併合成字串。NSArray也能夠!
- NSString *str = @"opp:abc:book:come";
- NSString *chunks = [str componentsSeparatedByString:@":"];
- str = [chunks componentsJoinedByString:@":)"];
這時候的str為"opp:)abc:)book:)come"
- NSMutalbeArray:
- +(idarrayWithCapacity:(unsigned)numltems; //預分配一個大小,不會將對象預寫入數組,也不會局限數組大小。
- -(void)addObject:(id)anObject; //在數組末路增加對象
- -(void)removeObjectAtIndex:(unsigned)index; //剔除一個對象,重要索引從0開始,並且被剔除對象後面的數組元素前移來添補空缺。
- NSEnumerator枚舉措施方便數組
- -(NSEnumerator *)objectEnumerator;//向數組哀求列舉程式
- -(id)nextObject; //向列舉程式哀求下一個對象,歸來nil表示哀求告終
- NSEnumerator *enumerator;
- id thingid;
- enumerator = [array objectEnumerator];
- while(thingid = [enumerator nextObject]){}
迅速枚舉。Objective-C 2.0中有迅速枚舉措施。
- for(NSString *str in array) {NSLog(@"%@",str); } 62.syxinhao.com//迴圈經驗 方便數組中每個元素
NSDictionary是在給定關鍵字例如一個字串)下儲存一個數值對象),然後能夠穿越關鍵字來尋找相應數值。
- Tire *t1 = [Tire new];....Tire *t4 = [Tire new];
- NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys:t1,@"f_l",t2,@"f_r",t3,@"b_l",t4,@"b_r",nil];
- //接受對象和關鍵字 交替儲存。nil終止
- Tire *tire = [tires objectForKey:@"l_r"];
- //歸來一個id 這裡是Tire對象,萬一未曾l_r關鍵字 歸來nil。
NSMutableDictionary和NSMutableArray相仿壟斷。
不要容易想創立NSString,NSArray,NSDictionary的子類!許多類是以類簇措施告終,它們是一群隱藏在通用介面下的與告終相干的類。創立NSString對象時,切實上獲得的可能是NSLiteralString,NSCFString,NSSimpleCString對象。給類簇創立子類很繁瑣,然而能夠將NSString複合到我們自己的某個類可能利用種類vielai處理,而無須創立子類。
4.數值
NSArray,NSDictionary都不能儲存任何大約種類的資料。我們能夠用對象來封裝大約數值,然後將該對象納入NSArray中。
- NSNumber:
- NSNumber *num;
- num = [NSNumber numberWithInt/Char/Float/Bool:1];
- [array addObject:num];
- [dictionary setObject:num forKey :@"book"];
- -(char)charValue; -(int)intValue;....-(NSString *) stringValue;用來解析NSNumber中封裝的資料。
- NSValue:
NSNumber是NSValue的子類。NSValue能夠封裝任何值。能夠用來封裝構造。
- NSRect rect = NSMakeRect(1,1,20,20);
- NSValue *value;
- value = [NSValue valueWithBytes:&rect
- objCType:@encode(NSRect)];
//(const void *)value想儲存的變數的地址。c中&。@encode編譯器能夠接受資料種類名目並產生輕便字串。
- [array addObject:value];
提取:
- value=[array objectAtIndex:0];
- [value getValue:&rect];//利用了get
(void *)value指標所指向的空間來儲存該措施產生的資料。
對於構造:
- +(NSValue *)valueWithRect:(NSRect)rect; -(NSRect) rectValue;
- NSNULL:
只有一個措施 +(NSNull *)null;
用在NSArray可能NSDictionary中表示這裡什麼都未曾。因為nil被用了。
- [contact setObject:[NSNull null]
- forKey:@"haha"];
- id hahaid;
- hahaid = [contact objectForKey:@"haha"];
- if(hahaid == [NSNull null]) {} //[NSNull null]
歸來的數值總是一樣的,因而能夠用==來值比擬。代碼審查—由同志們尋找代碼中的訛謬—所覺察的訛謬與在測驗中所覺察的訛謬不同。
小結:Objective-C學習基礎筆記的內容介紹完了,希望本文對你有所協助!