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