`
最初永远
  • 浏览: 6241 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Objective-C集合(二)——集合家族

阅读更多

 

一.集合家族

1.NSArray

NSArray是一个Cocoa类,用来存储对象的有序列表,

限制:a.只能存储Objective-C的对象,而不能存储C语言中的基本数据类型,如int,float,enum,struct或者NSArray中的随机指针。

b.不能在NSArray中存储nil(对象的零值或NULL值)。

 //通过类方法arrayWithObjects创建一个新的NSArray,发送一个以逗号分隔的对象列表,
	//在列表结尾添加nil代表列表结束(这就是不能在数组中存储nil的原因之一)
	NSArray *array;
	array = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
	//获得对象的个数
	- (unsigned) count;
	//获取特定索引处的对象
	- (id)objectAtIndex: (unsigned int) index;
 

2.NSMutableArray:可变数组

//数组容易也只是数组最终大小的一个参考,不会将对象预写入数组,也不会用该容量值来限制数组的大小。
	+ (id) arrayWithCapactity: (unsigned int) numItems;
	//在数组结尾处添加对象
	- (void) addObject: (id) anObject
	//删除特定索引处的对象
	- (void)removeObjectAtIndex:(unsigned) index;
 

3.NSEnumerator(枚举)

        //创建
	- (NSEnumerator *) objectNSEnumeratort;
	NSEnumerator *anumerator;
	enumerator = [array objectNSEnumerator];
	//从后向前浏览集合
	- (void)reverseObjectEnumerator;
	//获得枚举器之后可以开始一个while循环,每次循环都向这个枚举器请求它的下一个对象;
	- (id) nextObject;
	nextObject返回nil值时,循环结束
	整个循环代码:
	NSenumerator *enumerator;
	enumerator = [array objectEnumerator];
	
	id thingie;
	//对可变数组进行枚举操作时,不能对数组容器进行添加或删除操作
	while(thingie == [enumerator nextObject]){
		NSLog(@"I found %@",thingie);	
	}
 

4.快速枚举

for(NSString *string in array){
		NSLog(@"I found %@",string);
	}
 

5.NSDictionary(散列结构)

(1)NSDictionary

               //创建字典
		+ (id)dicationaryWithObjectsAndKeys:
					(id)firstObject,...;
		//获取字典中的值
		- (id) objectForKey: (id) aKey;

		示例代码:
		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]

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

(2)NSDictionary不可变,NSMutableDictionary允许随意添加或删除元素。

               //创建NSMutableDictionary可以发送dictionary消息,也可以用dictionaryWithCapacity:方法
		//并用告诉该字典的最终大小
		+ (id) dicationaryWithCapacity: (unsigned int) numItems;//大小仅仅是建议,不是对其限制
		//添加元素
		- (void) setObject: (id) anObject 
				forKey: (id) aKey;
		//删除元素
		- (void) removeObjectForKey:(id)aKey;
 

基本数据类型包装类

1.NSNumber

NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,但是可以用对象来封装然后添加到集合中

Cocoa提供了NSNumber类来包装(即以对象形式实现)基本数据类型

a.几个方法示例:

+ (NSNumber *) numberWithChar : (Char)value;
	+ (NSNumber *) numberWithInt : (Int)value;
	+ (NSNumber *) numberWithFloat : (Float)value;
	+ (NSNumber *) numberWithBool: (Bool)value;
 

b。Objective-c中不支持自动装箱

      NSNumber *number;
	number = [NSNumber numberWithInd:42];
	[array addObject: number];
	[dictionary setObject: number forkey: @"Bork"];
 

C。只要将一个基本类型数据封装到NSNumber中就可以通过下列方法重新获取它

       - (Char) charValue;
	-  (Int) intValue;
	- (Float) floatValue;
	- (Bool) boolValue;
	- (NSString *) stringValue
 

2.NSValue

NSNumber是NSValue的子类,NSValue可以包装任意值。

+ (NSValue *) valueWithBytes: (const void *) value
			objCType: (const void *) type;
 

可以使用类方法创建新的NSValue:

 

3.NSNull

不能将nil存入近NSArray,NSDictionary中,因为nil代表的是一个集合的结束。

传空值用如下方法:

+ (NSNull *)  null;
 

示例:

[contact setObject: [NSNull null] forKey:@"home fax machine"];
 

访问它的方法

      id homefax;
	homefax = [contact objectForKey: @"home fax machine"];
	if(homefax == [NSNull null]){
		//no fax machine......
	}
 

二.集合综合运用小例子查找文件

int main(int argc, Const char *argc[]){
	//初始化对象池
	NSAutoreleasePool *pool;
	pool = [[NSAutoreleasePool alloc] init];
	//获得fileManager
	NSFileManager *defaultManager;
	defaultManager = [NSFileManager defaultManager];
	//将路径封装
	NSString *home;
	home = [@"~",stringByExpandingTildeInPath];
	//将路径字符串传递给文件管理器
	NSDirectoryEnumerator *direnum;
	direnum = [manager enumeratorAtPath: home];
	//创建可变数组
	NSMutableArray *files;
	files = [NSMutableArray arrayWithCapacity: 42];
	//迭代符合条件扩展名为jpg的文件名
	NSString *filename;
	while(filename = [direnum nextObject]){
		if([[filename pathExtension] isEqualTo: @".jpg"]){
			[files addObject: fillname];
		}
	}
	//打印所有符合条件的文件名
	NSEumerator *filenum;
	filenum = [files objectEnumerator];
	while(filename = [filenum nextObject]){
		NSLog(@"%@",filename);
	}

	[pool drain];
	return 0;
}
 

  快速迭代方法

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

	NSFileManager *defaultManager;
	defaultManager = [NSFileManager defaultManager];

	NSString *home;
	home=[@"~",stringExpandingTildeInPath];

	NSMutableArray *files;
	files = [NSMutableArray arrayWithCapacity: 42];

	for(NSString *filename in [defaultManager enumeratorAtPath: home]){
		if([[filename pathExtension] isEqualTo: @".jpg"]){
			[files addObject filename];
		}
	}

	for(NSString *filename in files){
		NSLog(@"@",filename);
	}
}
 

 

分享到:
评论

相关推荐

    Objective-C培训教程

    在第二章数据类型中,Objective-C提供了标准C语言的数据类型外,还引入了对象类型的引用。在Objective-C中,所有的对象变量都是指针类型,使用*符号来表示。id类型是Objective-C中一种特殊的数据类型,可以指向任何...

    The Objective-C Programming Language

    本文档主要关注的是面向对象开发环境的第一个组成部分——Objective-C编程语言,并为理解第二个组成部分——Objective-C应用框架(统称为Cocoa)打下基础。运行时环境则在单独的文档《Objective-C运行时编程指南》中...

    Objective-C 基础教程

    - **Objects, Classes, and Messaging(对象、类与消息传递)**:深入探讨了Objective-C中的核心概念——对象、类以及消息传递机制,这是Objective-C的基础。 #### 三、对象与消息传递 - **Objects(对象)** - *...

    Objective-C的语法与Cocoa框架

    #### 二、Objective-C的关键特性 - **面向对象**:Objective-C 支持面向对象的编程风格,包括封装、继承和多态性。 - **动态消息传递**:Objective-C 使用一种称为“动态消息传递”的机制来实现方法调用。 - **内存...

    Objective-C基础教程(中文版)

    总的来说,《Objective-C基础教程(中文版)》是一本全面而深入的学习指南,旨在帮助读者掌握Objective-C语言和Cocoa框架,为投身iOS或Mac开发打下坚实基础。通过阅读和实践,你将能够理解Objective-C的核心概念,并...

    NSHIPSTER:Obscure Topics In Cocoa & Objective-C

    - Objective-C类型系统中的nil和NULL:不同编程语言或框架对空值的表示各不相同,在Objective-C中,nil通常用于对象,而NULL用于C语言中的指针。 - BOOL类型:在Objective-C中,BOOL类型表示布尔值,并且与基本的...

    Programming in Objective-C(最新第四版)

    - **Objective-C简介**:本书为初学者提供了深入浅出的Objective-C介绍,无需预先掌握面向对象编程语言或C语言的基础。 - **编程入门**:通过实例介绍如何编写基本的Objective-C程序,包括变量、数据类型、运算符等...

    解锁Objective-C的KVC:深入Key-Value Coding的奥妙

    Objective-C是一种功能强大且灵活的面向对象编程语言,它在C语言基础上增加了面向对象的特性。自1980年代由Brad Cox和Tom Love设计以来,Objective-C经过苹果公司的采纳与改进,成为了macOS和iOS开发中的关键语言之...

    Object C 面向对象编程

    Objective-C允许开发者使用C语言进行编程,同时引入了Smalltalk风格的消息传递机制,从而提供了类、继承和多态等面向对象特性。 面向对象编程的关键概念包括: 1. 数据和操作:数据通常指的是对象的状态,操作指的...

    iPhone 开发,面向对象的C语言

    Objective-C是C语言的一个扩展,融入了Smalltalk的面向对象特性,使得开发者能够利用面向对象编程的强大功能来构建复杂的iOS应用。本章节将深入探讨Objective-C在iPhone开发中的关键概念和技术。 一、Objective-C...

    预科班oc_代码_及ppt_文档相关资料

    iOS 5是一个重要的里程碑,引入了许多新特性,如Notification Center和iCloud集成,但课程的核心——Objective-C的编程基础,是不受这些更新影响的。 【标签】"Object" 指向的是面向对象编程,这是Objective-C的一...

    swift pdf版

    这意味着开发者可以继续使用现有的Objective-C代码库,同时也可以逐步迁移到Swift语言。 4. 易用性:Swift语言的设计目标是让编程变得更加容易、更加有趣。Swift语言采用了清晰的语法和简洁的代码风格,使得开发者...

    IOS应用源码——yanzheng-match_game_git-c230d4f.rar

    《iOS应用源码详解——yanzheng-match_game_git-c230d4f》 本文将深入探讨一款名为“yanzheng-match_game_git-c230d4f”的iOS应用程序的源码,它是一个游戏项目,旨在帮助开发者理解iOS应用开发的基本流程、核心...

    libs-base:GNUstep基础库是通用,非图形的Objective C对象的库

    总的来说,GNUstep基础库(libs-base)是Objective-C开发者在非苹果平台上不可或缺的工具,它提供了Objective-C语言的核心功能和Foundation框架的关键实现,使得开发者能够在各种操作系统上构建健壮且功能丰富的应用...

    Using the GNU Compiler

    - **Objective-C语言**:GCC也支持Objective-C及其混合C++的标准,提供了面向对象编程的支持。 - **除了上述语言外**,GCC还支持Ada、Fortran、Go、Java等其他语言。 #### 三、遵循的语言标准 **GCC支持的语言标准...

    IOS应用源码——torrez-MatchGame-619986c.rar

    【标题】"IOS应用源码——torrez-MatchGame-619986c.rar"指的是一个关于iOS平台的游戏应用程序源代码包。这个源代码是torrez开发的MatchGame项目的一个版本,版本号为619986c。在iOS应用开发中,源码是开发者用于...

    Using the GNU Compiler Collection For gcc version 4.6.0 .pdf

    GCC 4.6.0还提供了一系列针对C语言家族(包括C、C++、Objective-C等)的扩展。这些扩展旨在提高编程效率、增强代码可读性和可维护性。例如,GCC支持内联函数、属性声明等特性,这些都是C语言标准之外的额外功能。 #...

    Swift5.1官方中文教程完整版pdf最新版本

    除了继承Objective-C的类型外,Swift还引入了Objective-C中所不具备的新类型——元组(Tuple)。元组允许开发者创建和传递一组数据,并且可以用作函数的返回值,以返回多个值。 对于编程初学者而言,Swift同样表现...

    Mac OS X Cocoa Programming-1

    Objective-C为开发者提供了一种将面向对象的概念引入C语言的方法,同时也带来了许多面向对象的设计原则,但语法相对简单。 ##### 框架 - **Foundation**:这是Cocoa的核心基础框架,包含了处理字符串、数组、集合和...

Global site tag (gtag.js) - Google Analytics