Objective-C學(xué)習(xí)基礎(chǔ)筆記
Objective-C學(xué)習(xí)基礎(chǔ)筆記是本文要介紹的內(nèi)容,Cocoa由兩個(gè)框架構(gòu)成:Foundation Kit和Application Kit。Application包括所有用戶接口對(duì)象和高級(jí)類;Foundation框架中包括面向數(shù)據(jù)的低級(jí)類和數(shù)據(jù)種類,具有100多個(gè)類,例如NSString,NSArray,NSEnumerator,NSNumber等。相干文檔儲(chǔ)藏于/Developer/ADC Reference Library/documentation/index.html中。
1.常用數(shù)據(jù)種類
- typedef struct _NSRange{
- unsigned int location;
- unsigned int length;
- }NSRange;
表示相干事物的范圍,例如字符串中字符范圍可能數(shù)組中元素范圍等。location是范圍的起始位置,length元素個(gè)數(shù)。
創(chuàng)立措施:
- NSRange range; range.location = 1; range.length = 4;
- NSRange range = {1,4}; //C語言的聚合構(gòu)造賦值機(jī)制
- NSRange range = NSMakeRange(1,4); //能夠在能夠利用函數(shù)的任何地方調(diào)用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是一個(gè)矩形數(shù)據(jù)種類,NSPoint是起始點(diǎn),NSSize存儲(chǔ)長度和寬度。 NSMakeRect() NSMakePoint().
這些常用的數(shù)據(jù)種類是C的struct而不是對(duì)象,在許多過程(例如GUI過程)中有許多臨時(shí)的點(diǎn),大小和矩形去告終工作,所有的Objective-C對(duì)象都是動(dòng)態(tài)分配的,這么是一個(gè)代價(jià)較高的壟斷,必需許多工夫。
2.字符串
Cocoa處理字符串的類NSString和它的子類NSMutableString。
- +(id)stringWithFormat:(NSString *)format,...;
指能夠接受以逗號(hào)離別的多個(gè)參數(shù)。+指該措施為類措施,是屬于類對(duì)象。Obj-C在出產(chǎn)一個(gè)類的時(shí)候會(huì)創(chuàng)立一個(gè)代表類的類對(duì)象,包括指向超類的指針,類名和指向類措施列表的指針。還包括一個(gè)long數(shù)據(jù)nanjianyan.com,為新創(chuàng)立的類實(shí)例對(duì)象指定大小。-來開始聲明的為實(shí)例措施,這些實(shí)例措施可能在某個(gè)對(duì)象實(shí)例中運(yùn)行。萬一某措施用來告終慣例功能例如創(chuàng)立一個(gè)實(shí)例對(duì)象可能拜會(huì)一些大局類數(shù)據(jù),等閑聲明為類措施。
-(unsigned int)length; 它能夠準(zhǔn)確處理國際字符串。中文,日文以及用Unicode國際字符規(guī)范的字符串。而在C中處理這些國際字符串很繁瑣,因?yàn)橐粋€(gè)字符挪借空間肯那個(gè)多于一個(gè)字節(jié),strlen()只計(jì)算字節(jié)數(shù)的函數(shù)等閑不行。
-(BOOL)isEqualtoString:(NSString *)str; 而==計(jì)算符只推斷兩個(gè)字符串指針數(shù)值,未曾推斷他們所指向的對(duì)象。
- -(NSComparisonResult)compare:(NSString *)str options:(unsigned)mask;
NSComparisonResult是一個(gè)enum型數(shù)據(jù)
- typedef enum _NSComparisonResult{
- NSOrderedAscending = -1, NSOrderedSame, NSOrderedDescending
- }NSComparisonResult;
options是一個(gè)位掩碼,能夠用位或|來加選項(xiàng)符號(hào)。NSCaseInsensitiveSearch不判別大小寫字符,NSLiteralSearch判別大小寫,NSNumericSearch比起字符串字符個(gè)數(shù)。
- NSString *str1 = @"hello 1 world";
- NSString *str2;
- str2 = [NSString stringWithFormat:@"hello %d world",1];
- if([str1 compare:str2
- options:NSCaseInsensitiveSearch | NSNumericSearch]
- == NSOrderedSame)
- {}
NSString一旦創(chuàng)立了就不能改換。能夠用它生成新的字符串,查找字符可能比擬。然而不能剔除可能增加字符??勺兊念怤SMutableString是NSString的子類。它們是在一個(gè).h文件中。
- +(id)stringWithCapacity:(unsigned)capacity;
創(chuàng)立一個(gè)capacity容量的字符串。先預(yù)分配一塊內(nèi)存存儲(chǔ)它,后續(xù)的壟斷速度會(huì)快許多。當(dāng)然也能夠用它父類NSString的類措施和實(shí)例措施都能夠利用。
- NSMutableString *friends;
- friends = [NSMutalbeString stringWithCapacity:50];
- [friends appendString:@"James lilei lucy"]; //增加字符串到對(duì)象末路
- NSRange range;
- range = [friends rangeOfString:@"lilei"]; //查找str2在str1中的范圍
- range.length++;
- [friends deleteCharactersInRange:(NSRange)range]; //穿越范圍剔除字符
3.聚集
- NSArray,NSMutalbeArray,NSEnumerator,NSDictionary
NSArray類是一個(gè)存儲(chǔ)對(duì)象的有序列表。只存儲(chǔ)Objective-C對(duì)象不存儲(chǔ)C中大約數(shù)據(jù)種類(int,float,enum,struct)可能NSArray中隨即指針。同時(shí)也不存儲(chǔ)nil(對(duì)象的零值可能NULL值)。
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"three",nil];do1k.com是以nil結(jié)尾的。這即便不能存儲(chǔ)nil的起因之一。
- for(int i=0;i<[array count];i++){NSLog(@"index %d has %@", i, [array objectAtIndex:i]);}
-(unsigned)count;包括對(duì)象個(gè)數(shù)。-(id)objectAtIndex:(unsigned int)index;獲得特定索引處的對(duì)象。
失常處理:
萬一index大于數(shù)組對(duì)象個(gè)數(shù):Terminating app due to uncaught exception 'NSRangeException' reason:'...',有眾多捉拿失常并處理的重復(fù)。
CF:Core Foundatin框架利用,與Cocoa框架一樣,然而用C語言告終。CF中的對(duì)象和Cocoa對(duì)象直接是免費(fèi)橋接的,能夠互換利用。
切分?jǐn)?shù)組:
Perl可能Python中適應(yīng)于將字符串切分成數(shù)組和將數(shù)組元素并合成字符串。NSArray也能夠!
- NSString *str = @"opp:abc:book:come";
- NSString *chunks = [str componentsSeparatedByString:@":"];
- str = [chunks componentsJoinedByString:@":)"];
這時(shí)候的str為"opp:)abc:)book:)come"
- NSMutalbeArray:
- +(idarrayWithCapacity:(unsigned)numltems; //預(yù)分配一個(gè)大小,不會(huì)將對(duì)象預(yù)寫入數(shù)組,也不會(huì)局限數(shù)組大小。
- -(void)addObject:(id)anObject; //在數(shù)組末路增加對(duì)象
- -(void)removeObjectAtIndex:(unsigned)index; //剔除一個(gè)對(duì)象,重要索引從0開始,并且被剔除對(duì)象后面的數(shù)組元素前移來添補(bǔ)空缺。
- NSEnumerator枚舉措施方便數(shù)組
- -(NSEnumerator *)objectEnumerator;//向數(shù)組哀求枚舉器
- -(id)nextObject; //向枚舉器哀求下一個(gè)對(duì)象,歸來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//循環(huán)經(jīng)驗(yàn) 方便數(shù)組中每個(gè)元素
NSDictionary是在給定關(guān)鍵字(例如一個(gè)字符串)下存儲(chǔ)一個(gè)數(shù)值(對(duì)象),然后能夠穿越關(guān)鍵字來查找相應(yīng)數(shù)值。
- 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];
- //接受對(duì)象和關(guān)鍵字 交替存儲(chǔ)。nil終止
- Tire *tire = [tires objectForKey:@"l_r"];
- //歸來一個(gè)id 這里是Tire對(duì)象,萬一未曾l_r關(guān)鍵字 歸來nil。
NSMutableDictionary和NSMutableArray相仿壟斷。
不要容易想創(chuàng)立NSString,NSArray,NSDictionary的子類!許多類是以類簇措施告終,它們是一群隱藏在通用接口下的與告終相干的類。創(chuàng)立NSString對(duì)象時(shí),切實(shí)上獲得的可能是NSLiteralString,NSCFString,NSSimpleCString對(duì)象。給類簇創(chuàng)立子類很繁瑣,然而能夠?qū)SString復(fù)合到我們自己的某個(gè)類可能利用種類vielai處理,而無須創(chuàng)立子類。
4.數(shù)值
NSArray,NSDictionary都不能存儲(chǔ)任何大約種類的數(shù)據(jù)。我們能夠用對(duì)象來封裝大約數(shù)值,然后將該對(duì)象納入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中封裝的數(shù)據(jù)。
- NSValue:
NSNumber是NSValue的子類。NSValue能夠包裝任何值。能夠用來包裝構(gòu)造。
- NSRect rect = NSMakeRect(1,1,20,20);
- NSValue *value;
- value = [NSValue valueWithBytes:&rect
- objCType:@encode(NSRect)];
//(const void *)value想存儲(chǔ)的變量的地址。c中&。@encode編譯器能夠接受數(shù)據(jù)種類名目并生成輕便字符串。
- [array addObject:value];
提?。?/p>
- value=[array objectAtIndex:0];
- [value getValue:&rect];//利用了get
(void *)value指針?biāo)赶虻目臻g來存儲(chǔ)該措施生成的數(shù)據(jù)。
對(duì)于構(gòu)造:
- +(NSValue *)valueWithRect:(NSRect)rect; -(NSRect) rectValue;
- NSNULL:
只有一個(gè)措施 +(NSNull *)null;
用在NSArray可能NSDictionary中表示這里什么都未曾。因?yàn)閚il被用了。
- [contact setObject:[NSNull null]
- forKey:@"haha"];
- id hahaid;
- hahaid = [contact objectForKey:@"haha"];
- if(hahaid == [NSNull null]) {} //[NSNull null]
歸來的數(shù)值總是一樣的,因而能夠用==來值比擬。代碼審查—由同志們尋找代碼中的訛謬—所覺察的訛謬與在測(cè)驗(yàn)中所覺察的訛謬不同。
小結(jié):Objective-C學(xué)習(xí)基礎(chǔ)筆記的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!