IOS之Objective-C学习笔记(六)
2012-07-01 12:51
330 查看
今天继续记录我的学习过程,现在开始:
1.NSArray:是一个Cocoa类,用来存储对象的有序列表,你可以在NSArray中放入任意类型的对象:NSString,Car,Shape,Tire或者其他对象。不过值得注意的是,它有两个 限制,首先它只能存储Objective-C的对象,而不能存储C语言的基本类型数据,如int,float,enum,struct,或者NSArray中的随机指针。同时也不能存储nil。
[plain] view
plaincopy
(1)类方法arrayWithObjects ,创建一个新的NSArray:
NSArray *array;
array = [ NSArray arrayWithObjects : @"one", @"two", @"three", nil ];
(2)-(unsigned) count 获得数组所包含的对象个数
和 -(id) objectAtIndex : (unsigned int ) index 获得特定引索处的对象
int i ;
for ( i = 0; i < [ array count ]; i++){
NSLog (@"index %d has %@ ,", i , [ array objectAtIndex : i ] );
}//输出index 0 has one, index 1 has two, index 2 has three,在引索越界会报错!
2.可变数组NSMutableArray :
[plain] view
plaincopy
(1)+(id) arrayWithCapacity : (unsigned) numitems,创建新的可变数组:
NSMutableArray *array;
array = [ NSMutableArray arrayWithCapacity : 17 ;]
(2)-(void) addObject : (id) anObject在数组末尾添加对象;
(3)-(void) removeObectAtIndex : (unsigned) index,可以通过它删除特定引索处的对象:
[ array removeObjectAtIndex : 1 ];//值得注意的删除了这个特定引索的对象时,数组中并没有留下漏洞,被删除对象后面的数组元素都被前移来填补空缺了。
3.枚举NSEnumerator:
[plain] view
plaincopy
(1)-(NSEnumerator *) objectEnumerator 通过它可以向数组请求枚举器:
NSEnumerator *enumerator;
enumerator = [ array objectEnumerator];
//如果想从后向前浏览集合,还有一个方法reverseObjectEnumerator可以使用
(2)-(id) nextObject: 向枚举器请求它的下一个对象:
NSEnumerator *enumerator;
enumerator = [ array objectEnumerator];
id thingie;
while (thingie = [ enumerator nextObject ]){
NSLog (@" I found %@" , thingie);
}//需要注意的是,对可变数组进行枚举操作时,有一点需要注意,你不能通过添加或删除对象这类方式来改变数组容器。
(3)快速枚举:
for (NSString *string in array){
NSLog (@"I found %@ ", string);
}//这个循环体将会遍历数组的每个元素,并用变量string存储每个数组值,它比枚举器语法更为简洁。
4.NSDictionary字典,它在给定一个关键字下存储一个数值,然你可以通过这个关键字来查找相应的数值。
[plain] view
plaincopy
(1)+( id )dictionaryWithObjectAndKeys:
( id )firstObject , .......; 该方法接受对象和关键字交替存储的系列,以nil值作为终止符号。
创建存储轮胎的字典例子:
NSDictionary *tires;
[ tires setObject : t1 forKey : @"front-left"];
[ tires setObject : t2 forKey : @"front-right"];
[ tires setObject : t3 forKey : @"back-left"];
[ tires setObject : t4 forKey : @"back-right"];//如果对字典中已有的关键字使用setObject :forKey:, 那么这个方法将会用新值替换原有数值.
(2)-(id)objectForKey : (id) aKey;通过键值获取字典中对应的值
Tire *tire = [ tires objectForKey : @"back-right" ];
(3)+(id)dictionaryWithCapacity : (unsigned int) numitems;创建可变字典
(4)-(void)removeObjectForKey : (id)aKey;通过键值删除对应值
[ tires removeObjectForKey : @"back-left"];
5.在使用NSString,NSArray,NSDictionary的时候,注意不要试图去创建它们的子类。
6.NSNumber 用来包装类用的:
[plain] view
plaincopy
(1)+(NSNumber *)numberWithChar : (char)value;
(2)+(NSNumber *)numberWithInt : (int)value;
(3)+(NSNumber *)numberWithFloat : (float)value;
(4)+(NSNumber *)numberWithBool : (BOOL)value;//除了这些还有很多,这些是比较常用的,通过创建NSNumber后,可以把它放
入一个字典和数组中
NSNumber *number;
number = [ NSNumber numberWith : 42];
[ array addObject : number ];//加进数组里
[ dictionary setObect : number forKey : @"Bork"];//加入字典里
通过以下方法可以重获得它:
-(char) charValue;
-(int) intValue;
-(float) floatValue;
-(BOOL)boolValue;
-(NSString *)stringValue;
此外,可以用nuberWithFloat::创建的NSNumber可以用intValue来提取数值,NSNumber会对数据进行适当的转换。
7.NSValue,它是NSNumber的父类,它可以包装任何值,可以用它来装结构体。
[plain] view
plaincopy
(1) *(NSValue *)valueWithBytes :(const void *)value
objCType : (const char *)type; 创建新的NSValue,参数一时你想要包装的数值地址。
例子:NSRect rect = NSMakeRect(1,2,30,40);
NSValue * value;
value = [NSValue valueWithBytes :&rect
objCType : @encode(NSRect)]; //@encode编译器指令可以接受数据的名称并为你生成合适的字符串
[ array addObject : value ];
(2)-(void)getValue : (void *) value;提取数值,例子:
value = [array objectAtIndex : 0];
[ value getValue : &rect ];//传递的是要存储这个数值的变量地址
(3)Cocoa提供饿将常用的strcut类型数据转换成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 ];
8.NSNull类:只有一个方法:+(NSNull *)null;例子:[ contact setObject : [ NSNull null ] forKey : @"home fax machine" ];
9.总结浏览集合的三种方式:(1)用数组的引索遍历(2)用枚举器(3)用快速枚举
好了,今天就写到这里,后面继续会有更新~转载请注明:http://blog.csdn.net/yuzhiboyi
1.NSArray:是一个Cocoa类,用来存储对象的有序列表,你可以在NSArray中放入任意类型的对象:NSString,Car,Shape,Tire或者其他对象。不过值得注意的是,它有两个 限制,首先它只能存储Objective-C的对象,而不能存储C语言的基本类型数据,如int,float,enum,struct,或者NSArray中的随机指针。同时也不能存储nil。
[plain] view
plaincopy
(1)类方法arrayWithObjects ,创建一个新的NSArray:
NSArray *array;
array = [ NSArray arrayWithObjects : @"one", @"two", @"three", nil ];
(2)-(unsigned) count 获得数组所包含的对象个数
和 -(id) objectAtIndex : (unsigned int ) index 获得特定引索处的对象
int i ;
for ( i = 0; i < [ array count ]; i++){
NSLog (@"index %d has %@ ,", i , [ array objectAtIndex : i ] );
}//输出index 0 has one, index 1 has two, index 2 has three,在引索越界会报错!
2.可变数组NSMutableArray :
[plain] view
plaincopy
(1)+(id) arrayWithCapacity : (unsigned) numitems,创建新的可变数组:
NSMutableArray *array;
array = [ NSMutableArray arrayWithCapacity : 17 ;]
(2)-(void) addObject : (id) anObject在数组末尾添加对象;
(3)-(void) removeObectAtIndex : (unsigned) index,可以通过它删除特定引索处的对象:
[ array removeObjectAtIndex : 1 ];//值得注意的删除了这个特定引索的对象时,数组中并没有留下漏洞,被删除对象后面的数组元素都被前移来填补空缺了。
3.枚举NSEnumerator:
[plain] view
plaincopy
(1)-(NSEnumerator *) objectEnumerator 通过它可以向数组请求枚举器:
NSEnumerator *enumerator;
enumerator = [ array objectEnumerator];
//如果想从后向前浏览集合,还有一个方法reverseObjectEnumerator可以使用
(2)-(id) nextObject: 向枚举器请求它的下一个对象:
NSEnumerator *enumerator;
enumerator = [ array objectEnumerator];
id thingie;
while (thingie = [ enumerator nextObject ]){
NSLog (@" I found %@" , thingie);
}//需要注意的是,对可变数组进行枚举操作时,有一点需要注意,你不能通过添加或删除对象这类方式来改变数组容器。
(3)快速枚举:
for (NSString *string in array){
NSLog (@"I found %@ ", string);
}//这个循环体将会遍历数组的每个元素,并用变量string存储每个数组值,它比枚举器语法更为简洁。
4.NSDictionary字典,它在给定一个关键字下存储一个数值,然你可以通过这个关键字来查找相应的数值。
[plain] view
plaincopy
(1)+( id )dictionaryWithObjectAndKeys:
( id )firstObject , .......; 该方法接受对象和关键字交替存储的系列,以nil值作为终止符号。
创建存储轮胎的字典例子:
NSDictionary *tires;
[ tires setObject : t1 forKey : @"front-left"];
[ tires setObject : t2 forKey : @"front-right"];
[ tires setObject : t3 forKey : @"back-left"];
[ tires setObject : t4 forKey : @"back-right"];//如果对字典中已有的关键字使用setObject :forKey:, 那么这个方法将会用新值替换原有数值.
(2)-(id)objectForKey : (id) aKey;通过键值获取字典中对应的值
Tire *tire = [ tires objectForKey : @"back-right" ];
(3)+(id)dictionaryWithCapacity : (unsigned int) numitems;创建可变字典
(4)-(void)removeObjectForKey : (id)aKey;通过键值删除对应值
[ tires removeObjectForKey : @"back-left"];
5.在使用NSString,NSArray,NSDictionary的时候,注意不要试图去创建它们的子类。
6.NSNumber 用来包装类用的:
[plain] view
plaincopy
(1)+(NSNumber *)numberWithChar : (char)value;
(2)+(NSNumber *)numberWithInt : (int)value;
(3)+(NSNumber *)numberWithFloat : (float)value;
(4)+(NSNumber *)numberWithBool : (BOOL)value;//除了这些还有很多,这些是比较常用的,通过创建NSNumber后,可以把它放
入一个字典和数组中
NSNumber *number;
number = [ NSNumber numberWith : 42];
[ array addObject : number ];//加进数组里
[ dictionary setObect : number forKey : @"Bork"];//加入字典里
通过以下方法可以重获得它:
-(char) charValue;
-(int) intValue;
-(float) floatValue;
-(BOOL)boolValue;
-(NSString *)stringValue;
此外,可以用nuberWithFloat::创建的NSNumber可以用intValue来提取数值,NSNumber会对数据进行适当的转换。
7.NSValue,它是NSNumber的父类,它可以包装任何值,可以用它来装结构体。
[plain] view
plaincopy
(1) *(NSValue *)valueWithBytes :(const void *)value
objCType : (const char *)type; 创建新的NSValue,参数一时你想要包装的数值地址。
例子:NSRect rect = NSMakeRect(1,2,30,40);
NSValue * value;
value = [NSValue valueWithBytes :&rect
objCType : @encode(NSRect)]; //@encode编译器指令可以接受数据的名称并为你生成合适的字符串
[ array addObject : value ];
(2)-(void)getValue : (void *) value;提取数值,例子:
value = [array objectAtIndex : 0];
[ value getValue : &rect ];//传递的是要存储这个数值的变量地址
(3)Cocoa提供饿将常用的strcut类型数据转换成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 ];
8.NSNull类:只有一个方法:+(NSNull *)null;例子:[ contact setObject : [ NSNull null ] forKey : @"home fax machine" ];
9.总结浏览集合的三种方式:(1)用数组的引索遍历(2)用枚举器(3)用快速枚举
好了,今天就写到这里,后面继续会有更新~转载请注明:http://blog.csdn.net/yuzhiboyi
相关文章推荐
- IOS cocos2d学习笔记-<八>游戏关卡(Objective-C文件读写)
- 2011斯坦福大学iOS应用开发教程学习笔记(第三课)Objective-C
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之10-变量和数据类型——黑马 IOS 技术博客
- iOS: 学习笔记, Swift与Objective-C混用总结
- IOS学习笔记--Objective-C之协议、代码块、分类
- IOS之Objective-C学习笔记(二)
- IOS之Objective-C学习笔记(一)
- 第二章、Objective-c 语法,类/属性/函数(iOS学习笔记,从零开始。)
- 斯坦福大学iOS应用开发教程学习笔记(第三课) Objective-C
- 斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C
- iOS学习笔记07—Objective-C 委托、非正式协议、正式协议
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之01 引言——黑马 IOS 技术博客
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之11-分类和协议——黑马 IOS 技术博客
- iOS开发笔记 之 第1章 Objective-C语法学习
- ios学习笔记(二)之Objective-C类、继承、类别和协议 - superlucky
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之12-预处理程序——黑马 IOS 技术博客
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之二:成员变量与属性
- iOS学习笔记(13)—— Objective-C类扩展的方法之一——分类(category)
- IOS之Objective-C学习笔记(三)
- iOS学习笔记72-Objective-C Autorelease Pool 的实现原理