Objective-C之Foundation Kit教程

本文是Objective-C之Foundation Kit教程,主要介绍了一些常用的数据类型,如NSRange、NSPoint和NSString。讲解了字符串的创建、比较、长度等操作,以及集合家族如NSArray、NSMutableArray、NSDictionary的使用。此外,还提到了 NSNumber、NSValue和NSNull在封装基本数据类型和结构体中的作用。
摘要由CSDN通过智能技术生成

Objective-C之Foundation Kit教程



前言

这篇文章来帮助大家快速了解Cocoa的Foundation框架。
⚠️Foundation框架只是Cocoa的一部分,但是它并没有内置于Objective-C语言中

Cocoa Foundation框架中有很多有用的、面向数据的低级类和数据类型,例如NSString、NSArray、NSEnumerator和NSNumber等。


一、一些有用的数据类型

先来看看Cocoa中的一些结构体(struct)。

1.范围的作用

第一个结构体是NSRange:

typeder struct _NSRange {
   
	ussigned int location;//location字段存放该范围的起始位置
	ussigned int length;//length字段则是该范围内所含元素的个数
} NSRange;

这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。


可以用3种方式创建新的NSRange:

  1. 直接给字段赋值:
NSRange range;
range.location = 17;
range.length = 4;
  1. 应用C语言的聚合结构赋值机制:
NSRange range = {
    17,4 };
  1. 使用Cocoa提供的一个快捷函数NSMakeRange( ):
NSRange range = NSMakeRange(17,4);

使用NSMakeRange( )的好处是可以在任何能够使用函数的地方使用它,例如在方法调用中将其当成参数传递。

2.几何数据类型

NSPoint和NSSize可以用来处理几何图形的数据类型。

NSPoint代表的是笛卡尔平面中的一个点(x,y):

typeder struct _NSPoint {
   
	float x;
	float y;
} NSPoint;


NSSize用来存储宽度和长度:

typeder struct _NSSize {
   
	float width;
	float height;
} NSSize;


Cocoa还提供了一个矩形数据类型NSRect,它是由点和大小复合而成的:

typeder struct _NSRect {
   
	NSPoint origin;//点
	NSSize size;//大小
} NSRect;

Cocoa也提供了创建这些数据类型的快捷函数: NSMakePoint( )、NSMakeSize( )和NSMakeRect( )。


二、字符串

NSString是Cocoa中用来处理字符串的类,Cocoa中的NSString有很多内置方法,它们让字符串的处理变得简单很多。

字符串就是一组人类可读的字符序列。我们使用过的NSString型数据便是特殊的NSString字面量,其指示标志是字符串双引号前的@符号,例如@“Hello”。

1.创建字符串

我们见过的诸如printf( )和NSLog( )之类的函数,它们接收格式字符串和一些参数来输出格式化的结果。

NSString的 stringWithFormat: 方法就是通过 格式字符串参数 来创建NSString的:

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

可以按照以下方式创建一个新的字符串:

NSString *height;
height = [NSString stringWithFormat:
		@"My height is %d feet, %d inches.",5,11];
		//得到的字符串为"My height is 5 feet, 11 inches."

2.类方法

stringWithFormat: 的声明中有两个值得讨论的地方。

第一个是定义最后的省略号(…),它告诉我们这个方法可以接收多个以逗号隔开的其他参数,就像printf( )和NSLog( )一样。

第二个是声明的开始字符: 一个加号。OC运行时生成一个类的时候,它会创建一个代表该类的类对象。类对象包含了指向超类的指针、类名和指向类方法列表的指针。类对象还包含一个long型数据,为新建的类实例对象指定大小(以字节为单位)。

如果在声明方法时添加了加号(+),那么就是把这个方法定义为类方法。这个方法属于类对象,并且通常用于创建新的实例。我们称这种 用来创建新对象的类方法工厂方法
stringWithFormat: 就是一个工厂方法,它根据我们提供的参数创建新对象。
类方法也可以用来访问全局数据,这里先不举例子了。

我们所创建的大部分方法都是实例方法,要用前导减号(-)来开始声明,这些方法将会在某个对象实例中运行,比如获取一个Circle的颜色或者一个Tire的气压等。
如果某方法用来实现常规功能,比如创建一个实例对象或者访问一些全局类数据,那么最好使用前导假号(+)将它声明为类方法

3.关于大小

NSString中另一个方便的方法(实例方法)是 length ,它返回字符串中的字符个数。

声明如下:

- (unsigned int) length;


使用方法:

unsigned int lengthOfString = [height length];
//或
if([height length] > 35) {
   
	NSLog(@"wow,you are really tall!");
}

NSString的length方法能够准确无误地处理国际字符串。

4.比较的策略

比较是字符串之间常见的操作,NSString提供了几个用于比较的方法。

  1. isEqualToString:
    isEqualToString: 可以用来比较接收方和当作参数传递来的字符串。isEqualToString: 返回一个BOOL(YES/NO)型数据来表示两个字符串的内容是否相同。

    它的声明及使用方法:
//声明
- (BOOL) isEqualToString: (NSString *) aString;

//使用方法
NSString *thing1 = @"hello 5";
NSString *thing2;
thing2 = [NSString stringWithFormat: @"hello %d",5];

if(thing1 isEqualToString: thing2) {
   
	NSLog(@"They are the same!");
}
  1. compare:
    compare: 将接受对象和传递来的字符串逐个字符地进行比较,它返回一个NSComparisonResult(一个enum型数据)来显示比较结果。
    如果返回的结果是NSOrderedAscending,那么左侧的数值小于右侧的数值,即compare的目标在字母表中的排序位置比传递进来的字符串更靠前。例如,[@“aardvark” compare: @“zygote”]将会返回NSOrderedAscending。
    同理,[@“zoinks” compare: @“jinkies”]将会返回NSOrderedDescending,并且[@“fnord” compare: @“fnord”]返回的是NSOrderedSame。
//3种结果
typedef enum _NSComparisonResult {
   
	NSOrderedAscending = -1,
	NSOrderedSame,
	NSOrderedDescending
} NSComparisonResult;

5.不区分大小写的比较

compare: 进行的是区分大小写的比较。还有一个方法 compare:options: ,它能给我们更多的控制权:

 - <
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值