Foundation kit 快速教程

Foundation kit 快速教程,第1张

概述  NSRange范围   typedef struct  _NSRange{          unsigned int location;          unsigned int length; }NSRange;   unsigned int是C语言中的int类型 location用来存放字段范围的起始位置, length是该范围内所含元素的个数   字符串”Objective-C is

 

NSRange范围

 

typedef struct  _NSRange{

         unsigned int location;

         unsigned int length;

}NSRange;

 

unsigned intC语言中的int类型

location用来存放字段范围的起始位置,

length是该范围内所含元素的个数

 

字符串”Objective-C is a cool language”coollocation17length4

 

三种赋值方式:

(1)       直接给字段赋值

NSRange range;

range.location = 17;

range.length = 4;

 

(2)       C语言的聚合结构赋值

NSRange range = {17,4};

 

(3)       Cocoa提供的快捷函数NSMakeRange(位置参数、长度参数)

NSRange range = NSMakeRange(17,4);

可以在方法调用中传递参数

[anObject  flarbulateWithRange: NSMakeRange(13,15)];

 

几何数据类型

NSPoint笛卡儿平面中的坐标点(x,y

typedef struct _NSPoint{

         float x;

         float y;

}NSPoint;

快捷函数:NSMakePoint()

 

NSSize用来存储长度和宽度

typedef  struct _NSSize{

         float wIDth;

         float height;

}NSSize;

快捷函数:NSMakeSize()

 

NSRect矩形数据类型

typedef  struct  _NSRect{

         NSPoint origin;

         NSSize  size;

}NSRect;

快捷函数:NSMakeRect();

 

 

二、字符串Nsstring

 

Nsstring类,其字符串以@开头,例@”Hello World”

 

格式化字符串

 

stringWithFormat方法

+(ID) stringWithFormat(Nsstring *)format,….

最后的….表示这个方法可以接收多个逗号隔开的其他参数

+(ID)表示这个方法属于类对象不属于类的实例对象,类方法可以访问全局数据

-)声明的方法是实例方法,在实例对象中运行

 

例:Nsstring *height;

         height = [Nsstring stringWithFormat:@”Your height is %d Feed. %d incheds”,5,11];

 

字符串长度

length方法

-(unsigned  int) length;

unsigned int length = [height length];

在表达式中使用

if([height length] > 35){

         NSLog(@”wow,you’re really tall!!”);

}

 

 

字符串比较方法

isEqualToString方法

可以用来比较接收方(接收消息的对象)和当做参数传递来的字符串,返回BOol

 

例:

         -(BOol)isEqualToString:(Nsstring *)aString;

Nsstring *thing1 = @”hello”;

Nsstring *thing2 = @”hello”;

if([thing1 isEqualToString: thing2]){

         NSLog(@”They are the same”);

}

 

compare方法

将接收对象和传递来的字符串逐个字符进行比较,返回一个NSComparisonResult(枚举型数据),是区分大小写的比较

 

typedef  enum  _NSComparisonResult{

         NSOrderedAscending = -1,

         NSOrderedSame,

         NSOrderedDescending

} NSComparisonResult;

例:[@”aardvark”  compare: @” zoinks”] 返回NSOrderedAscending

[@”zoinks”  compare: @”jinkIEs”] 返回NSOrderedDescending

         [@”fnord”  compare:@”fnord”] 返回NSOrderedSame

 

不区分大小写的参数

-(NSComparisonResult)   compare: (Nsstring)string

                                   options(unsigned)mask;

 

options参数是一个位掩码,可以使用位或|来添加选项标记

                   NSCaseInsensitiveSearch:不区分大小写字符

                   NSliteralSearch:进行完全比较,区分大小写

                   NSNumericSearch:比较字符串的字符个数,不比较字符值,不选他100会排在99                                                              前面

例:

if([thing1 compare :thing2 option : NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame)

{

         NSLog(@"is Match");

}

 

字符串检索

-(BOol)hasPrefix:(Nsstring *) aString;          检查字符串是否以另一个字符串开头

-(BOol)hasSuffix:(Nsstring *) aString;          判断字符串是否以另一个字符串结尾

 

例子:if([filename hasPrefix: @”draft”])

 

字符串某处包含其他字符串

-(NSRange) rangeOfString : (Nsstring *)aString;

例:NSRange range = [filename rangeOfString : @"chapter"];

找到了range.startlength为数字,没找到startNSNotFound

 

 

可变性的字符串

NSMutableString

Nsstring是不可变的字符串,NSMutableStringNsstring的子类可以改变字符串的长度

使用类方法stringWithCapacity创建或stringWithFormat –因为继承的关系Nsstring中的类也可调用

+(ID)stringWithCapacity:(unsigned) capacity;

例:NSMutableString *string;

         string = [NSMutableString  stringWithCapacity:42];

附加新字符串appendStringappendFormat

-(voID) appendString: (Nsstring *) aString;                aString附加到接收对象的末尾

-(voID) appendFormat: (Nsstring *) format,….;      将格式化的字符串附加在接收字符串的末尾

删除字符串中的字符deleteCharactersInRange

例:创建朋友列表

NSMutableString *frIEnds;

         frIEnds = [NSMutableString  stringWithCapacity:50];

         [frIEnds  appendString: @”James BethLynn Jack Evan”];

         查找Jack的字符范围

         NSRange  jackRange;

         jackRange  = [frIEnds  rangeOfString: @”Jack”];

         jackRange.length++;        吃掉剩下的空间

         删除Jack

         [frIEnds  deleteCharactersInRange:  jackRange];

 

 

 

三、集合

NSArray不可变数组

 

NSArray可以存入任意类型的对象,通过索引访问对象

                   不可以存非Objective-C的对象,不能存nil0NulL值)

构造方法+(ID)arrayWithObjects:object,….,nil;

结尾处必须加nil已表示赋值结束

 

例子:     NSArray  *array;

                   array  = [NSArray arrayWithObjects : @”one”,@”two”,@”three”,nil];

 

获取数组对象个数

-(unsigned) count;

获取特定索引处的对象

-(ID) objectAtIndex: (unsigned int) index;

 

例子:二者结合用于循环

                   int I;

                   for (I = 0; I < [array  count]; i++){

         NSLog(@”index  %d  has  %”,i,[array  objectAtIndex:  i]);

}

 

切分数组

-componentsSeparatedByString

例子:

                   Nsstring  *string  = @”oop:ack:bork:greeble:ponIEs”;

                   NSArray  *chunks = [string  componentsSeparatedByString: @”:”];

componentsJoinedByString合并NSArray中的元素创建字符串

                   string = [chunks  componentsJoinedByString: @”:-)”];

 

 

NSMutableArray可变数组

可以任意添加和删除数组中的对象

 

构造方法:

+(ID) arrayWithCapacity : (unsigned) numitems;

例:

NSMutableArray *array;

array = [NSMutableArray  arrayWithCapacity : 17];

 

使用addobject在数组末尾添加对象:

-(voID) addobject : (ID) anObject;

例:

for(i = 0; i < 4 ; i++){

         Tire  *tire = [Tire new];

         [array  addobject : tire];

}

 

使用removeObjectAtIndex删除对象:

-(voID) removeObjectAtIndex : (unsigned) index;

例:[array  removeObjectAtIndex : 1];

 

 

四、枚举

NSEnumerator使用枚举来迭代运算集合

通过objectEnumerator从前向后遍历集合

通过reverSEObjectEnumerator从后向前遍历集合

-(NSEnumerator *) objectEnumerator;

-(NSEnumerator *) reverSEObjectEnumerator;

 

利用while循环向枚举器请求nextObject对象(下一个对象):

-(ID) nextObject;

nextObject返回nil时循环结束

举例代码:

         NSEnumerator  *enumerator;

         enumerator = [array  objectEnumerator];

         ID  thingle;

         while(thingle = [enumerator  nextObject]){

                   NSLog(@"I  found %@",thingle);

         }

 

Tip:对可变数组 *** 作时不能通过添加或删除对象来改变数组容器,否则程序会崩溃

 

 

快速枚举

Mac OS X 10.5 Leopard 中添加了此方法,之前版本无法使用

 

循环会遍历数组中的每个元素,并用指定的变量存储每个数组对象

:

         for (Nsstring  *string  in  array){

                   NSLog(@"I  found  %@",string);

         }

 

NSDictionary不可变字典集合

键值对集合,不可变集合,在创建时就要提交全部的对象和关键字

 

字典集合对于频繁查询和大型数据集来说要比其他数组高效的多,他直接通过键查询而无需遍历集合

 

构造函数+(ID) dictionaryWithObjectsAndKeys : (ID) firstObject,(ID)firstKey,....;

此方法接受对象和关键字交替存储的序列,以nil值作为终止符,不能在集合中添加nil

举例代码:

         Tire  *t1 = [Tire  new];

         Tire  *t2 = [Tire  new];

         Tire  *t3 = [Tire  new];

         Tire  *t4 = [Tire  new];

        

         NSDictionary  *tires;

 

         tires = [NSDictionary  dictionaryWithObjectsAndKeys :

                            t1,@"front-left",t2,@"front-right",

                            t3,@"back-left",t4,@"back-right",nil];

使用方法objectForkey来获取字典中的值,向方法传递对应值的关键字

-(ID) objectForKey : (ID) akey;

举例代码:

         Tire  *tire = [tires  objectForKey : @"back-right"];

如果没有找到会返回nil

 

NSMutableDictionary可变字典集合

构造函数+(ID) dictionaryWithCapacity : (unsigned int) numitems;

长度只是建议无限制

也可使用dictionary

 

使用setobject : forKey方法给字典添加元素

-(voID) setobject : (ID) anObject forKey : (ID) aKey;

举例代码:

         NSMutableDictionary  *tires;

         tires = [NSMutableDictionary dictionary];

         [tires  setobject : t1  forKey : @"front-left"];

如果已经有了该对象则修改该对象

 

使用removeObjectForKey方法删除关键字和对象

-(voID)removeObjectForKey : (ID) akey;

举例代码:

         [tires  removeObjectForKey : @"back-left"];

 

 

五、各种基本数据类

 

因为NSArrayNSDictionary只能存储对象,所以Objective-C提供了将基础数据类型封装为对象的类

NSNumber类包装基本数据类型

使用下列类方法创建新的NSNumber对象

+(NSNumber  *) numberWithChar : (char) value;

+(NSNumber  *) numberWithInt : (int) value;

+(NSNumber  *) numberWithfloat : (float) value;

+(NSNumber  *) numberWithBool : (BOol) value;

还有很多其他数据类型的方法,行驶大同小异

 

调用封装到NSNumber中的数据

-(char) charValue;

-(int) intValue;

-(float)floatValue;

-(BOol) boolValue;

-(Nsstring  *) stringValue;

etc

Tip:高精度数据可以被低精度数据提取方法提取出来,NSNumber会对数据进行适当转换

 

 

 

NSValue可以包含任何值

NSValueNSNumber的超类

NSValue可以放入NSArrayNSDictionary

 

构造函数:+(NSValue  *) valueWithBytes : (const voID *) value  存储变量的地址C语言中使用 *** 作符&对象                                                                               名来 *** 作对象地址

                                                    objCType : (const char *) type;   描述数据类型的字符串

 

@encode编译器指令产生数据类型字符串

 

举例代码:

         NSRect  rect = NSMakeRect(1,2,30,40);

         NSValue  *value;

         value = [NSValue    valueWithBytes : &rect

                                               objCType : @encode(NSRect)];

         [array  addobject : value];

 

使用方法getValue来提取数值:需提供数值变量的地址,即&对象名

-(voID) getValue : (voID *) value;

举例代码:

         value = [array  objectAtIndex : 0];

         [value  getValue : &rect];

Tip:还记得吗,get开头的方法返回的是一个指针

 

Cocoa提供了将常用struct型数据转换为NSValue的方法:

+(NSValue  *) valueWithPoint : (NSPoint) point;

+(NSValue  *) valueWithSize : (NSSize) size;

+(NSValue  *) valueWithRect : (NSRect)rect;

 

-(NSPoint) pointValue;

-(NSSize) sizeValue;

-(NSRect) rectValue;

举例代码:在NSArray中存储和检索NSRect

         value = [NSValue  valueWithRect : rect];

         [array  addobject : value];

         ……

         NSRect  anotherRect = [value  rectValue];

 

NSNull空值对象

因为nil在集合中有特殊含义所以创造出来这个类来代替nil

获得一个NSNull空值方法+(NSNull  *) null;

举例代码:

(1)判断是否为空

         ID homefax;

         homefax = [contact  objectForKey : @"123 456 789"];

         if(homefax  ==  [NSNull  null]){

                   //

         }

(2)将空添加到集合中

         [contact          setobject : [NSNull  null]

                                     forKey : @"is nil"]

一、一些有用的数据类型

总结

以上是内存溢出为你收集整理的Foundation kit 快速教程全部内容,希望文章能够帮你解决Foundation kit 快速教程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067574.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存