IOS 学习第三天

一些有用的数据类型:表示范围作用的结构体:NSRange:有三种方式创建新的 NSRange

1NSRange range;

range.location = 17;

range.length = 4;

2NSRange range = {17 ,4};

3NSRangerange=NSMakeRange(17,4); (推荐)


表示用来处理几何图形的数据类型:NSPoint(点坐标)和 NSSize(长度和宽度)还有一个矩形数据类型(由点和大小复合而成)NSRect
Cocoa
提供创建这些数据类型方法:NSMakePoint() 、NSMakeSize()和 NAMakeRect()

表示字符串的类 NSString
NSString *heigth =
[NSString stringWithFormat: @"Youheigth is %d feet,%d inches", 5,11];

创建的类对象包含了指向超类的指针、 类名和指向类方法的列表的指针。 类对象还包含一long 的数据,为新创建的类对象指定大小。

	 返回字符串中的字符的个数:

unsigned int length = [heigth length];

返回 Bool 值的字符串比较函数:

- (BOOL) isEqualToString:(NSString *)aString;//比较两个字符串的内容是否相等

还可以使用 compare :方法

-(NSComparisonResult)compare :(NSString *)string;//逐个字符比较不区分大小写的比较:

-(NSComparisonResult)compare :(NSString *)string options:(unsigned)mask;

注意:NSComparisonResult 是一个枚举值

options 是一个位掩码,即:NSCaseInsensitiveSearch:不区分大小写
NSLiteralSearch: 进行完全比较,区分大小写NSNumericSearch: 比较字符串的字符个数,而不是字符值

检查字符串是否以另一个字符串开头-(BOOL)hasPrefix : (NSString *)aString;

判断字符串是否是以另一个字符串结尾

    
    

-(BOOL)hasSuffix : (NSString *)aString;如果你想知道字符串内的某处是否包含其他字符串,使用rangeOfString: 方法

-(NSRange)rangeOfString :(NSString *)aString; NSString 是不可变的,NSMutableString 是可变的。用方法 stringWithCapacity :来创建

NSMutableString *string = [NSMutableString stringWithCapacity :42];

可以使用 appendString :或 appendFormat : 来附加新字符串:- (void) appendString :(NSString *)aString; - (void) appendFormat :(NSString *)format , . . . ;可以使用deleteCharactersInRange: 方法删除字符串中的字符-(void)deleteCharactersInRange: (NSRange)range;

集合家族:

NSArray:用来存储对象的有序列表(任意类型的对象) 限制: 只能存储ObjectiveC 的对象, 不能存储C 语言的基本数据类型 (intfloatenumstruct、 或者NSArray中的随机指针) 。同时也不能存储nil(对象的零值或NULL值)

//创建一个新的 NSArray NSArray *array =[NSArray arrayWithObjects: @"one",@"two",nil];//获得包含的对象个数 - (unsigned)count; //获得特定索引处的对象 - (id)objectAtIndex :(unsigned int)index

切分数组:

使用 componentsSeparatedByString : 来切分 NSArray, NSString *string = @"oop : ack : bork : greeble : ponies" ; NSArray *chunks = [string componentsSeparatedByString : @":"]; 使用 componentsJoinedByString : 来合并 NSArray 中的元素并创建字符串string = [chunks componentsJoinedByString :@":-)"] ;

NSArray 是不可变数组,数组中包含的对象是可以改变的,但是数组对象本身是不会改变的。

可变数组 NSMutableArray 通过类方法 arrayWithCapacity : 来创建可变数组+ (id)arrayWithCapacity :(unsigned)numItems ; NSMutableArray *array = [NSMutableArray arrayWithCapacity : 17];

使用 addObject : 在数组末尾添加对象- (void)addObject :(id)anObject 

删除特定索引的对象 - (void)removeObjectAtIndex :(unsigned)index;注:可变数组还可以在特定索引处插入对象,替换对象,为数组排序N,SArray 还提供了大量好用的功能。

枚举:

NSEnumerator 用来描述这种集合迭代器运算的方法: 要想使用 NSEnumerator,需要通过 objectEnumerator 向数组请求枚举器: - (NSEnumerator *) objectEnumerator; 可以像这样使用这个方法: NSEnumerator *enumerator; enumerator = [array objectEnumerator ];注:若想从后向前枚举集合,使用方法reverseobjectEnumerator; 也可以使用。获得枚举器以后,开始 while 循环,每次循环都向这个枚举器请求它的nextObject- (id)nextObject;//返回 nil 表明循环结束注:在枚举的过程中不能改变数组容器。

快速枚举示例:

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

}

数组排序:

例如:一条记录就是一条卡片的信息,包括(NSString *name 和 NSString *email)-(void)sort {

   [book sortUsingSelector:@selector(compareNames:)]
}

其中:

@selector(compareNames:)

//创建一个 SEL 类型的 selector,sortUsingSelector:使用该方法比较数组中的两个元素,sortUsingSelector:方法需要完成这样的比较,它先调用这个指定的selector 方法,然后向数组(接受者)的第一条记录发送消息,比较其参数和此记录。指定方法的返回值为NSComparisonResult 类型,返回值为:若小于返回NSOrderedAscending;相等返回 NSOrderedSame;大于返回NSOrderedDescending-(NSComparisonResult)compareNames:(id)element

{
return [name compare:[element name]];

}

NSDictionary: (关键字和定义的组合)
NSDictionary 通常在给定一个关键字(通常是一个NSString 字符串)下存储一个数值(可以是任何类 

型的对象) 。然后你可以使用这个关键字查找相应的数值。使用 dictionaryWithObjectsAndKeys :来创建字典
+ (id)dictionaryWithObjectsAndKeys :(id)firstObject , . . .

例如:

Tire *t1 = [Tire new];
NSDictionary *tires = [ NSDictionary dictionaryWithObjectsAndKeys
:t1,@"front-left",nil];

使用方法 objectForKey :来获取字典中的值- (id)objectForKey :(id)akey;查找轮胎可以这样:
Tire *tire = [tires objectForkey : @"front-left"];

创建新的 NSMutableDictionary 对象,向类 NSMutableDictionary 发送 dictionary 消息。也可以使用dictionaryWithCapacity: 方法来创建新的可变字典

+ (id)dictionaryWithCapacity:(unsigned int)numItems ;可以使用方法setObject :forKey :方法给字典添加元素setObject : forKey :(id)aKey

下面是另一种使用发送 dictionary 消息来创建字典的方法:NSMutableDictionary *tires;
tires = [NSMutableDictionary dictionary] ;
[tires setObject
:t1 forKey :@"front-left"];

...
注:若对字典中已有的关键字使用setObject :forKey :方法,则用新的替换

可以使用 removeObjectForKey : 方法来删除可变字典中的一个关键字- (void)removeObjectForKey:(id)aKey ;

注:不要去创建 NSStringNSArray NSDictionary 的子类,实在要的话可以用复合的方式来解决问题。

使用这种方法枚举词典:

for(NSString *key in g){

...} 

集合对象:

Set 是一组单值对象的集合,有可变和不可变,操作包括:搜索、添加、删除集合中的成员(仅用于可变集合) 、比较两个集合,计算两个集合的交集和并集等。

page13image9712 page13image9872
#import <Foundation/NSSet.h>

常用的 NSSet 方法 


    
    

方法

说明

+(id)setWithObjects:obj1,obj2,...,nil

使用一列对象创建新集合

-(id)initWithObjects:obj1,obj2,...,nil

使用一列对象初始化新分配的集合

-(NSUInteger)count

返回集合的成员个数

-(BOOL)containsObject:obj

确定集合是否包含 obj

-(BOOL)member:obj

使用 isEqual: 方法确定集合是否包含obj

-(NSEnumerator *)objectEnumerator

为集合中的所有对象返回一个NSEnumerator 对象

-(BOOL)isSubsetOfSet:nsset

确定 receiver 的每个成员是否都出现在nsset 中

-(BOOL)intersectsSet:nsset

确定是否 receiver 中至少一个成员出现在对象 nsset 中

-(BOOL)isEqualToSet:nsset

确定两个集合是否相等



    
    

常用的 NSMutableSet 方法(NSSet 的子类) 

方法

说明

-(id)setWithCapacity:size

创建新集合,使其具有存储 size 个成员的初始空间

-(id)initWithCapacity:size

将新分配的集合设置为 size 个成员的存储空间

-(void)addObject:obj

将对象 obj 添加到集合中

-(void)removeObject:obj

从集合中删除对象 obj

-(void)removeAllObjects

删除接受者的所有成员

-(void)unionSet:nsset

将对象 nsset 的所有成员昂添加到接受者

-(void)minusSet:nsset

从接受者中删除 nsset 的左右成员

-(void)intersectSet:nsset

将接受者中的所有不属于 nsset 的元素删除




    
    

注:NSInteger 不是一个对象,基本数据类型的 typedef,被 typedef 成 64 位的 long 或 32 位 int 

各种数值:NSNumber:

可以使用对象来封装基本数值。
NSNumber 类来包装基本数据类型。
+ (NSNumber *)numberWithChar :(char)value ;
+ (NSNumber *)numberWithInt :(int )value ;
+ (NSNumber *)numberWithFloat :(float)value ;
+ (NSNumber *)numberWithBool :(BOOL)value ;还有包括无符号版本和各种 long 型数据及 long long 整型数据例如:NSNumber *number = [NSNumber numberWithInt : 42] ;将一个基本类型封装到NSNumber 后,可以使用下列方法重新获得: 


    
    
  • -  (char)charValue;

  • -  (int)intValue;

  • -  (float)floatValue;

  • -  (BOOL)boolValue;

  • -  (NSString *)stringV alue

    1. NSV alue:

    alue: NSNumber 实际上是 NSV alue的子类, NSV alue可以封装任意值。 可以用NSV alue将结构放入 NSArray

    NSDictionary 中。 创建新的 NSV alue: +(NSValue*)valueWithBytes: (const void *) value

    objCType: (const char *)type; @encode 编译器指令可以接受数据类型的名称并为你生成合适的字符串。

    NSRect rect = NSMakeRect(1,2,30,40); NSValue* value ; value = [NSValuevalueWithBytes: &rect objCType: @encode(NSRect)];

    使用getValue:来提取数值 (传递的是要存储这个数值的变量的地址)(先找地址再取值)value = [array objectAtIndex : 0]; [ value getV alue: & rect ] ;

    注:Cocoa 提供了将常用的struct 型数据转化成NSValue的便捷方法:+ (NSValue*)valueWithPoint :(NSPoint)point ; + (NSValue*)valueWithSize :(NSSize)size; + (NSValue*)valueWithRect :(NSRect)rect ;

    - (NSSize)sizeValue; - (NSRect)rectValue; - (NSPoint)pointValue

NSNull:

在关键字下如果属性是NSNull表明没有这个属性, 没有数值的话表明不知道是否有这个属性[NSNullnull] //总返回一样的值

+ (NSNull *)null; 例如: [contast setObject : [NSNull null] forKey: @"home"];访问它: id home = [contast objectForKey : @"home" ] ; if (home==[NSNullnull]){ 

... 

}

NSFileManager 允许对文件系统进行操作(创建目录、删除文件、移动文件或获取文件信息)//创建一个属于自己的 NSFileManager 对象 NSFileManager *manager = [NSFileManager defaultManager] ; //将代字符‘~’替换成主目录

NSString *home = [@"~" stringByExpandingTildeInPath];//输出文件的扩展名 - (NSString*)pathExtension

示例:翻查主目录,查找.jpg 文件并输出找到的文件列表 

  1. //  
  2. //  main.m  
  3. //  FileWalker  
  4. //  
  5. //  Created by cloud on 13-3-8.  
  6. //  Copyright (c) 2013年 cloud. All rights reserved.  
  7. //  
  8.   
  9. #import <Foundation/Foundation.h>  
  10.   
  11. int main(int argc, const char * argv[])  
  12. {  
  13.   
  14.     @autoreleasepool {  
  15.           
  16.         // insert code here...  
  17.         NSFileManager *manager;//创建一个文件管理对象  
  18.         manager = [NSFileManager defaultManager];  
  19.           
  20.         NSString *home;//主机地址  
  21.         home = [@"~" stringByExpandingTildeInPath];  
  22.           
  23.         NSDirectoryEnumerator *direnum;//目录枚举器  
  24.         direnum = [manager enumeratorAtPath:home];  
  25.           
  26.         NSMutableArray * files;//可变数组放文件名  
  27.         files = [NSMutableArray arrayWithCapacity:42];  
  28.           
  29.         NSString *filename;//单个文件名  
  30.         while (filename = [direnum nextObject]) {  
  31.                 if([[filename pathExtension] isEqualTo:@"jpg"])  
  32.                 {  
  33.                     [files addObject:filename];  
  34.                 }  
  35.         }  
  36.           
  37.         NSEnumerator *fileenum;//数组枚举器  
  38.         fileenum = [files objectEnumerator];  
  39.           
  40.         while (filename=[fileenum nextObject]) {  
  41.             NSLog(@"%@",filename);  
  42.         }  
  43.           
  44.     } 
  45. [pool drain];  

  46.     return 0;  
  47. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值