Objective-C學習基礎筆記
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];
提?。?/p>
- 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學習基礎筆記的內容介紹完了,希望本文對你有所幫助!