objective-c Foundation kit 基本数据结构入门

 

Foundation kit  基本数据 结 构入 门

 

Cocoa 有两个不同的框架组成:Foundation kitApplication kitApplication kit 包含了所有的用户接口对象和高级类。Foundation kit 中有很多有用的,面向数据的低级类和数据类型,如NsstringNsArrayNsEnumeratorNsNumber 等。本章主要介绍Foundation kit 的一些基本数据结构。

一、常用的 结 构体

1.NSRange

typedef struct_NSRange

         unsigned int location;

         unsigned int length;

NSRange 可以使用3 中方式赋值:

<1>  直接赋值

           NSRange range;

           range.location = 1;

           range.length = 10;

<2>  使用c 语言聚合结构赋值机制

           NSRange range = {1, 10};

<3> 使用Cocoa 提供的函数:NSMakeRange();

           NSRange range  = NSMakeRange(17, 4);         

2.NSPoint NSSize:

typedef struct NSPoint {

           float x;

           float y;

}NSPoint;

 

typedef struct NSSize {

           float width;

           float height;

}NSSize;

Cocoa 提供了一个 矩形的结构体:

typedef struct _NSRect {

           NSPoint origin;

           NSSize size;

} NSRect;

如同NSRangeCocoa 为我们提供了创建这些结构体的函数:NSMakePoint(),NSMakeSize(),NSMakeRect()

Cocoa 使用结构体定义这些类型,而不是用对象,主要是出于性能上的考虑。

二、字符串

NSString 创 建方式可以采用如下方式 :

NSString *height;

        height = [NSString stringWithFormat:@"%@",@"fs"];

        NSLog(@"height:%@", height);

       

其中 stringWithFormat 方法定 义 如下:

+ (id)stringWithFormat:(NSString *) format, ...

前面的 + 表示 该 方法 为类 方法,并非 实例方法。而创建对象的类方法称为工厂方法。

NSString 的长度可以通过length 方法得到, 如下所示:

 

        long l = [height length];

        NSLog(@"%li",l);

NSString 的比较类似与java ,如果通过== 比较,是进行指针的比较,如果相比较值是否相同使用 isEqualToString

但是需要注意,采用stringwithString 方式初始化,与采用直接赋值的方式初始化,指针指向的是相同对象:

NSString *s1 = [NSString stringWithString:@"32k"];

        NSString *s2 = [NSString stringWithString:@"32k"];

        NSString *s3 = [NSString stringWithFormat:@"%dk", 32];

        NSString *s4 = @"32k";

        NSString *s5 = [NSString stringWithFormat:@"%@", @"32k"];

        if ([s1 isEqualToString:s2]) {

            NSLog(@"s1 isEqualToString:s2");

        }

        if (s1 == s2) {

            NSLog(@"s1 == s2");

        }

        if (s3 == s1) {

            NSLog(@"s3 == s1");

        }

        if (s1 == s4) {

            NSLog(@"s1 == s4");

        }

        if (s1 == s5) {

            NSLog(@"s1 == s5");

        }

其打印结果为:

2011-10-26 23:12:26.955 NSStringTest[561:707] s1 isEqualToString:s2

2011-10-26 23:12:26.956 NSStringTest[561:707] s1 == s2

2011-10-26 23:12:26.956 NSStringTest[561:707] s1 == s4

Program ended with exit code: 0

字符串间的比较也可以通过compare 函数进行:

if ([@"adb" compare:@"ssd"] == NSOrderedSame) {

            NSLog(@"NSOrderedSame");

        }

        else if ([@"adb" compare:@"ssd"] == NSOrderedAscending) {

            NSLog(@"NSOrderedAscending");

        }

        else if ([@"adb" compare:@"ssd"] == NSOrderedDescending) {

            NSLog(@"NSOrderedDescending");

        }

       

        if ([@"Ssd" compare:@"ssd" options:NSCaseInsensitiveSearch] == NSOrderedSame) {

            NSLog(@"NSOrderedSame");

        }

        else if ([@"Ssd" compare:@"ssd" options:NSCaseInsensitiveSearch] == NSOrderedAscending) {

            NSLog(@"NSOrderedAscending");

        }

        else if ([@"Ssd" compare:@"ssd" options:NSCaseInsensitiveSearch] == NSOrderedDescending) {

            NSLog(@"NSOrderedDescending");

        }

 

其中 NSOrderedDescending 是枚举定义的。 Option 为是否添加比较的参数。即是否需要不区分大小写,或者是否是数字比较等。。。

可以通过如下方式判断是否包含子串:

 

        if ([@"sscd" hasPrefix:@"ssc"]) {

            NSLog(@"hasPrefix");

        }

        if ([@"sscd" hasSuffix:@"scd"]) {

            NSLog(@"hasSuffix");

         }

       

        NSRange range = [@"abcdef" rangeOfString:@"cde"];

        NSLog(@"%ul %ul", range.location, range.length);

 

创建变长字符串:

NSMutableString 可以使用stringWithCapacity 来创建一个实例。其原理类似与stringBuffer 。不多赘述

NSMutableString *mutableString = [NSMutableString stringWithCapacity:30];

        [mutableString appendFormat:@"f%@",@"fsd"];

        NSLog(@"%@", mutableString);

       

        NSRange r = [@"ffsd" rangeOfString:@"fs"];

        [mutableString deleteCharactersInRange:r];

        NSLog(@"%@", mutableString);

 

首先: stringWithCapacity:30 中的 30 只是一个参考,并不最 终 决定字符串的 长 度。其余方法可以参考代 码 ;       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值