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学习基础笔记的内容介绍完了,希望本文对你有所帮助!