NSRange范围
typedef struct _NSRange{
unsigned int location;
unsigned int length;
}NSRange;
unsigned int是C语言中的int类型
location用来存放字段范围的起始位置,
length是该范围内所含元素的个数
字符串”Objective-C is a cool language”中cool的location为17,length为4
三种赋值方式:
(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.start和length为数字,没找到start为NSNotFound
可变性的字符串
NSMutableString
Nsstring是不可变的字符串,NSMutableString是Nsstring的子类可以改变字符串的长度
使用类方法stringWithCapacity创建或stringWithFormat –因为继承的关系Nsstring中的类也可调用
+(ID)stringWithCapacity:(unsigned) capacity;
例:NSMutableString *string;
string = [NSMutableString stringWithCapacity:42];
附加新字符串appendString或appendFormat
-(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的对象,不能存nil(0或NulL值)
构造方法+(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"];
五、各种基本数据类
因为NSArray和NSDictionary只能存储对象,所以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可以包含任何值
NSValue是NSNumber的超类
NSValue可以放入NSArray和NSDictionary中
构造函数:+(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 快速教程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)