10、Foundation框架

概述

Mac OS X开发会使用Cocoa框架,它是一种支持应用程序提 供丰富用户体验的框架,它实际上由:Foundation和Application Kit(AppKit)框架组成。 iOS开发,会使用Cocoa Touch框架,它实际上由:Foundation和UIKit框架组成。

AppKit和UIKit框架都是与窗口、按钮、列表等相关的类。 Foundation是Mac OS X和iOS应用程序开发的基础框架,它 包括了一些基本的类,如:数字、字符串、数组、字典等。

数字类

• 基本数据类型,int、char、float和double都不是类,不 具有方法、成员变量和属性,以及面向对象的特征。为了实现“一切都是对象”的承诺,因此在Foundation框架中使用 NSNumber类来封装这些数字类型。这样数字就具有了面向对象的基本特征了。

NSNumber类构造函数

采用+ numberWithInt:等“+ number”开头的类级构造方法 ,可以从基本数据类型构建NSNumber对象。而使用–intValue方法可以从NSNumber对象获得基本数据类型。

NSNumber *intNumber= [NSNumber numberWithInteger:80];
NSNumber *floatNumber = [NSNumber numberWithFloat:80.00];
int myint = [intNumber intValue];
float myfloat = [floatNumber floatValue];

比较两个NSNumber对象大小

可以转化成为基本数据类型比较,当然可以使用NSNumber的 方法比较,这就是对象的优势了,与比较相关方法有:
isEqualToNumber:和compare:。isEqualToNumber:只是比较 是否相对,compare:可以比较大小。

if ([intNumber isEqualToNumber: floatNumber] == YES) {            NSLog(@"相等");
} else { 
NSLog(@"不相等");
}
if ([intNumber compare: myNumber] ==NSOrderedAscending) {
NSLog(@"第一个数小于第二个数"); 
}

说明

NSOrderedAscending是枚举类型NSComparisonResult的其中成员,代表第一个数小于第二个数,此外还有NSOrderedSam e成员代表第一个数等于第二个数,NSOrderedDescending成员代表第一个数大于第二个数。

字符串类

在Foundation框架中字符串类有两种:NSString不可变字符串类和NSMutableString可变字符串类。NSString是定义固定大小的字符串,NSMutableString是可对字符串做追加、 删除、修改、插入和拼接等操作而不会产生新的对象。

NSString类

stringWithString:,类级构造方法创建NSString对象,NSString构造 方法还有很多;length,返回Unicode字符的长度;
stringByAppendingString:实现了字符串的拼接,这个方法会产生下一新的对象;
isEqualToString:,比较两个字符串是否相等;
compare: 比较两个字符串大小;
substringToIndex:,可以获得字符串的前x个字符串;
substringFromIndex:,可以截取x索引位置到尾部字符串;
rangeOfString:, 字符串查找;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *str1 = @"aBcDeFgHiJk";
    NSString *str2 = @"12345";
    NSString *res;
    NSComparisonResult compareResult;
    NSRange subRange;

    //字符个数
    NSLog(@"字符串str1长度: %i",[str1 length]);
    //拷贝字符串到res
    res = [NSString stringWithString: str1];
    NSLog(@"拷贝: %@", res);
    //拷贝字符串到str1尾部
    str2 = [str1 stringByAppendingString: str2];
    NSLog(@"连接字符串: %@", str2);

    //测试字符串相等
    if ([str1 isEqualToString: res] == YES) {
        NSLog(@"str1 == res");
    } else {
        NSLog(@"str1 != res");
    }
    //测试字符串 < > == 
    compareResult = [str1 compare: str2];
    if (compareResult == NSOrderedAscending) {
        NSLog(@ "str1 < str2");
    } else if (compareResult == NSOrderedSame) {
        NSLog(@ "str1 == str2");
    } else {
        NSLog(@ "str1 > str2");
    }
    res = [str1 uppercaseString];
    NSLog(@"大写字符串:%@", res);
    res = [str1 lowercaseString];
    NSLog(@"小写字符串:%@", res);
    NSLog(@"原始字符串: %@", str1);

    //获得前三个数
    res = [str1 substringToIndex: 3];
    NSLog(@"字符串str1的前三个字符: %@",res);
    res = [str1 substringFromIndex: 4];
    NSLog(@"截取字符串,从第索引4到尾部: %@",res);

    res = [[str1 substringFromIndex: 3] substringToIndex: 2];
    NSLog(@"截取字符串,从第索引3到5: %@",res);

    //字符串查找 
    subRange = [str2 rangeOfString: @"34"];

    if (subRange.location == NSNotFound) {
        NSLog(@"字符串没有找到");
    } else {
        NSLog (@"找到的字符串索引 %i 长度是 %i", 
               subRange.location, subRange.length);
    }


    [pool drain];   
    return 0;

}

解释说明

• 我们解释一下主要代码,str2 = [str1 stringByAppendingString: str2]语句是将两个字符串对象拼接在一起,由于NSString是不可变字符串类,这会产生一 个新的对象。subRange = [str2 rangeOfString:@”34”]中的 rangeOfString:方法会返回一个NSRange结构体,它的location成员是找到的字符串的索引,它的length成员是找 到的字符串的长度。

NSMutableString 类

stringWithString:,类级构造方法创建NSString对象, NSMutableString构造方法还有很多;
insertString:,插入字符串,不会创建新的对象; • appendString:,追加字符串,不会创建新的对象;
deleteCharactersInRange:在一个范围内删除字符串,不 会创建新的对象;
replaceCharactersInRange: withString:替换字符串,不 会创建新的对象;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *str1 = @"Objective C";
    NSString *search,*replace;
    NSMutableString *mstr;
    NSRange substr;

    //从不可变的字符创建可变字符串对象
    mstr = [NSMutableString stringWithString: str1];
    NSLog(@" %@", mstr);

    //插入字符串
    [mstr insertString: @ " Java" atIndex: 9];
    NSLog(@" %@", mstr);
    //具有连接效果的插入字符串
    [mstr insertString: @ " and C++"atIndex: [mstr length]];
    NSLog(@" %@", mstr);
    //字符串连接方法
    [mstr appendString: @ " and C"];
    NSLog(@" %@", mstr);    
    //使用NSRange删除字符串
    [mstr deleteCharactersInRange:NSMakeRange(16, 13)];
    NSLog(@" %@", mstr);    
    //查找字符串位置
    substr = [mstr rangeOfString: @ "string B and"];
    if (substr.location != NSNotFound) {
        [mstr deleteCharactersInRange: substr];
        NSLog(@" %@", mstr);
    }
    //直接设置可变字符串
    [mstr setString: @ "This is string A "];
    NSLog(@" %@", mstr);

    [mstr replaceCharactersInRange: NSMakeRange(8, 8)
                        withString: @ "a mutable string "];
    NSLog(@" %@", mstr);
    //查找和替换
    search = @"This is ";
    replace = @"An example of ";

    substr = [mstr rangeOfString:search];

    if (substr.location != NSNotFound) {
        [mstr replaceCharactersInRange:substr withString: replace];
        NSLog(@" %@", mstr);
    }
    //查找和替换所有的情况
    search = @"a";
    replace = @"X";
    substr = [mstr rangeOfString: search];

    while (substr.location != NSNotFound) {
        [mstr replaceCharactersInRange:substr withString: replace];
        substr = [mstr rangeOfString: search];
    }
    NSLog(@" %@", mstr);

    [pool drain];
    return 0;
}

说明

我们解释一下主要代码,语句[mstr deleteCharactersInRange:NSMakeRange(16, 13)]是删除指定范围的字符串,函数NSMakeRange 是创建NSRange结构体 ,其中第一个参数是位置,第二个参数是长度,语句[mstr replaceCharactersInRange: NSMakeRange(8, 8)withString: @ “a mutable string ”]替换指定访问的字符串。[mstr deleteCharactersInRange: substr]语句是删除指定范围的字符串。

数组类

在Foundation框架中数组被封装成为类,数组有两种: NSArray不可变数组类和NSMutableArray可变数组类。

NSArray类

NSArray有很多方法,下面是总结常用的方法:
• count,返回当前数组的长度;
• objectAtIndex:,按照索引返回数组中的元素;
• containsObject:是否包含某一元素;
• arrayWithObjects: 类级构造方法;
• initWithObjects: 实例构造方法;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSArray *weeksNames = [NSArray arrayWithObjects: 
                           @"星期一",@"星期二",@"星期三",@"星期四"
                           ,@"星期五",@"星期六",@"星期日",nil];
    NSLog(@"星期名字");
    NSLog(@"====   ====");
    int i;
    for (i=0; i < [weeksNames count];i++) {
        NSLog(@"%2i     %@ ", i+1, [weeksNames objectAtIndex: i]);      
    }


    [pool drain];
    return 0;
}

说明

arrayWithObjects可以用来创建使用一列对象作为元素的 数组。在这种情况下,按顺序列出对象并使用逗号隔开。使用这个方法必须在列表的最后指定一个结束标志nil。count 可以获得数组的长度。数组的下标是从0开始的。

NSMutableArray类

NSMutableArray是NSArray的子类,NSMutableArray有很多 方法,下面是总结常用的方法:
•addObject:,在数组的尾部追加一个元素;
• insertObject:,在数组的添加一个元素;
• atIndex:按照索引插入一个元素;
• removeObjectAtIndex:移除特定索引的元素;
• removeObject:移除特定元素;
• initWithCapacity: 实例构造方法;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

    NSMutableArray *weeksNames = [[NSMutableArray alloc] initWithCapacity: 3];
    [weeksNames addObject: @"星期一"];   
    [weeksNames addObject: @"星期二"];
    [weeksNames addObject: @"星期三"];   
    [weeksNames addObject: @"星期四"];
    [weeksNames addObject: @"星期五"];    
    [weeksNames addObject: @"星期六"];
    [weeksNames addObject: @"星期日"];  

    NSLog(@"星期名字");
    NSLog(@"====   ====");

    int i;
    for (i=0; i < [weeksNames count];i++) 
        NSLog(@"%2i     %@ ", i+1, [weeksNames objectAtIndex: i]); 

    [weeksNames release];

    return 0;

}

说明

[[NSMutableArray alloc] initWithCapacity: 3],可以初始化可变数组并分配3个初始单元,如果超过了容量会自动 追加的。addObject方法可以向数组中添加元素。

字典类

字典集合,它是由“键-值” 对构成的集合。键集合不能 重复,值集合没有特殊要求 。键和值集合中的元素可以 是任何对象,但是不能是nil。字典类数据结构模型,如 图所示的“学生与学号” 集合,与数组类一样,字典 类也分为NSDictionary不可变字典和NSMutableDictionar y可变字典。
这里写图片描述

NSDictionary类

NSDictionary有很多方法,下面是总结常用的方法:
• count,字典集合的长度;
•objectForKey:,通过键获得值对象;
• allKeys,返回所有键集合;
• arrayWithObjects:类级构造方法;
• initWithObjects: 实例构造方法;
• initWithObjects:forKeys:,实例构造方法;
• initWithObjectsAndKeys:,实例构造方法;
• initWithContentsOfFile:,从属性文件中创建对象;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSArray * keys = [@"one two three four five" componentsSeparatedByString:@" "];
    NSArray * values = [@"alpha bravo charlie delta echo" componentsSeparatedByString:@" "]; 
    NSDictionary * dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];

    NSLog(@"%@", [dict description]);

    [dict release];

    [pool drain];
    return 0;
}

说明

• NSArray * keys = [@“one two three four five”
componentsSeparatedByString:@“ ”]语句是将一个字符串按照空格分割返回NSArray对象,同理获得values对象, 然后使用NSDictionary * dict =[[NSDictionary alloc] initWithObjects:values forKeys:keys]语句把keys和value s放入到不可变字典对象dict中。

NSMutableDictionary类

NSMutableDictionary 是NSDictionary的子类,
NSMutableDictionary有很多方法,下面是总结常用的方法:
• setObject: forKey:,通过键和值;
• removeObjectForKey:,按照键移除值;
• writeToFile: atomically:,把对象写入到文件中;

实例

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];

    // add objects
    [mutable setObject: @"Tom" forKey: @"tom@jones.com"];
    [mutable setObject: @"Bob" forKey: @"bob@dole.com" ];

    NSLog(@"%@", [mutable description]);

    [mutable release];

    [pool drain];
    return 0;
}

说明

• NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init]是采用默认的init构造方法创建 NSMutableDictionary对象mutable。[mutable setObject:@”Tom” forKey: @”tom@jones.com”]语句是按照键 tom@jones.com添加Tom对象。

NSSet类

NSSet类是一组单值对象的集合,且NSSet实例中元素是无序的,同一个对象只能保存一个,并且它也分为可变和不可变的集合对象(NSMutableSet)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值