《数字字符串和集合课件.ppt》由会员分享,可在线阅读,更多相关《数字字符串和集合课件.ppt(30页珍藏版)》请在三一办公上搜索。
1、数字、字符串和集合,数字对象,int、float等基本数据类型,不是对象,不能向它们发送消息。而Foundation的对象NSArray数组中不能将基本数据类型存储进来。NSNumber类可以创建数据对象。NSNumber的创建方法和检索方法,如下:,例:NSNumber*intNumber,*floatNumber;NSInteger myInt;intNumber=NSNumber numberWithInt:150;myInt=intNumber integerValue;NSLog(%li,(long)myInt);floatNumber=NSNumber alloc initWith
2、Float:123.456;NSLog(%g,floatNumber floatValue);,字符串对象,NSString类用于处理字符串对象,由unichar字符组成。NSConstantString常量字符串对象,是NSString类的子类。如:NSString*str=”Programming is fun”NSLog(”%”,str);,可变字符串与不可变字符串,NSString类处理不可变对象NSMutableString类处理可变对象例1 Nstring字符串:NSString*str1=This a string A;NSString*str2=This a string B;
3、NSString*res=NSString stringWithString:str1;str2=str1 stringByAppendingString:str2;if(str1 isEqualToString:res=YES)NSLog(str1=res);NSComparisonResult result=str1 compare:str2;if(result=NSOrderedAscending)NSLog(str1str2);res=str1 uppercaseString;NSLog(%s,res UTF8String);,res=str1 substringToIndex:4;N
4、SLog(First 4 chars of str1%,res);res=str1 substringFromIndex:4;NSLog(chars from index of 4 of str1:%,res);res=str1 substringFromIndex:8 substringToIndex:6;NSLog(chars from index 8 through 13:%,res);res=str1 substringWithRange:NSMakeRange(8,6);NSLog(chars from index 8 through 13:%,res);NSRange subRan
5、ge=str1 rangeOfString:String A;NSLog(string is at index%lu,length is%lu,subRange.location,subRange.length);subRange=str1 rangeOfString:String B;if(subRange.location=NSNotFound)NSLog(string not found);,例2:NSMutableString NSString*str1=This is string A;NSString*search,*replace;NSMutableString*mstr;NSR
6、ange substrRange;mstr=NSMutableString stringWithString:str1;mstr insertString:mutable atIndex:7;mstr insertString:and string B atIndex:mstr length;mstr appendString:and string C;mstr deleteCharactersInRange:NSMakeRange(16,13);,substrRange=mstr rangeOfString:string B and;if(substrRange.location!=NSNo
7、tFound)mstr deleteCharactersInRange:substrRange;mstr setString:This is string A;mstr replaceCharactersInRange:NSMakeRange(8,8)withString:a mutable string;search=This is;replace=An example of”;substrRange=mstr rangeOfString:search;,if(substrRange.location!=NSNotFound)mstr replaceCharactersInRange:sub
8、strRange withString:replace;search=a;replace=X”;substrRange=mstr rangeOfString:search;while(substrRange.location!=NSNotFound)mstr replaceCharactersInRange:substrRange withString:replace;substrRange=mstr rangeOfString:search;,数组对象,Foundation数组是有序的对象集合一个数组中的元素都是一个特定类型,但不是必需的存在可变数组NSMutableArray和不可变数组N
9、SArray要在程序中使用数组对象,应包括相应头文件#import NSArray*monthNames=NSArray arrayWithObjects:January,Febrary,March,April”,nil;NSLog(%,monthNames);,int i,p,prevPrime;BOOL isPrime;NSMutableArray*primes=NSMutableArray arrayWithCapacity:20;primes addObject:NSNumber numberWithInt:2;primes addObject:NSNumber numberWithI
10、nt:3;for(p=5;p=100;p+=2)isPrime=YES;i=1;,do prevPrime=(int)primes objectAtIndex:i integerValue;if(p%prevPrime=0)isPrime=NO;+I;while(isPrime=YES,示例:制作地址簿,第一步:生成一个地址卡片AddressCard类,仅包含姓名和email字段,设置卡片的姓名和email字段,检索这些字段的内容,并打印卡片。interface AddressCard:NSObject NSString*name;NSString*email;-(void)setName:(
11、NSString*)theName;-(void)setEmail:(NSString*)theEmail;-(NSString*)name;-(NSString*)email;-(void)print;end,-(void)setName:(NSString*)theName/name=theName;/name=NSString alloc initWithString:theName;/如果某人更改了卡片上的姓名,在使用新姓名代替旧姓名前,释放旧姓名所占用的内存 name release;name=NSString alloc initWithString:theName;,-(void
12、)print NSLog(=);NSLog(|%-31s|,name UTF8String);NSLog(|%-31s|,email UTF8String);/需要重载dealloc方法,在释放AddressCard对象的内存时,其成员的内存一并释放-(void)dealloc name release;email release;super dealloc;,修改AddressCard类,如下:interface AddressCard:NSObject NSString*name;NSString*email;property(nonatomic,copy)NSString*name,*e
13、mail;-(void)setName:(NSString*)thename andEmail:(NSString*)theEmail;end,implementation AddressCardsynthesize name,email;-(void)setName:(NSString*)thename andEmail:(NSString*)theEmail self.name=thename;self.email=theEmail;end,第二步,定义地址簿AddressBook类,存储地址簿的名字和一个AddressCard集合。可以创建新地址簿,向其添加地址卡片,计算地址簿的记录数,
14、列出地址簿的内容。后续功能:搜索地址簿,删除记录,编辑现有记录,将记录排序等,#import AddressCard.h;interface AddressBook:NSObject NSString*bookName;NSMutableArray*book;-(id)initWithName:(NSString*)name;-(void)addCard:(AddressCard*)theCard;-(int)entries;-(void)list;-(void)dealloc;end,implementation AddressBook-(id)initWithName:(NSString*
15、)name self=super init;if(self)bookName=NSString alloc initWithString:name;book=NSMutableArray alloc init;return self;,-(void)addCard:(AddressCard*)theCard book addObject:theCard;-(int)entries return(int)book count;-(void)list NSLog(=Contents of:%=,bookName);for(AddressCard*card in book)NSLog(%-20s%3
16、2s,card.name UTF8String,card.email UTF8String);,-(void)dealloc bookName release;book release;super dealloc;end,在地址簿中查找某人:-(AddressCard*)lookup:(NSString*)theName for(AddressCard*nextCard in book)if(nextCard name caseInsensitiveCompare:theName=NSOrderedSame)return nextCard;return nil;,在地址簿中删除某人-(void
17、)removeCard:(AddressCard*)theCard book removeObjectIdenticalTo:theCard;,词典对象,Dictionary是由键-对象组成的数据集合词典中的键必须是单值的,通常是字符串和键关联的值 可以是任何对象类型,不能为nil词典可以是固定的,也可以是可变的 NSDictionary*glossary1=NSDictionary dictionaryWithObjectsAndKeys:A class defined so other classes can inherit from it,abstract class,To implem
18、ent all the method defined in a protocol,adopt,storing an object for later use,archiving,nil;,NSMutableDictionary*glossary2=NSMutableDictionary dictionary;glossary2 setObject:A class defined so other classes can inherit from it forKey:abstract class;glossary2 setObject:To implement all the method de
19、fined in a protocol forKey:adopt;glossary2 setObject:storing an object for later use forKey:archiving;for(NSString*key in glossary2)NSLog(%,%,key,glossary2 objectForKey:key);,练习,1、修改AddressBook中的lookup:方法,使之能够找出name的部分匹配。消息表达式:myBook lookup:”steve”;应该匹配名称中任何位置包含字符串“steve”的记录2、修改lookup:方法,使之能够搜索地址簿所有
20、匹配的卡片,返回数组。3、在AddressCard类添加新字段:地址和电话号码字段。编写合适的setter和getter方法,并确保print方法和list方法能恰当地显示这些字段,4、给定以下声明:-(BOOL)removeName:(NSString*)theName;在AddressBook类中添加该方法,从地址簿中删除该用户名的记录。5、使用以前定义的Fraction分数类,根据任意一些值创建一个分数数组,编写代码计算数组中所有分数的和。6、定义三个新类:Song、PlayList和MusicCollection。Song对象包含歌曲信息:歌曲名、艺术家、专辑、歌曲长度等,PlayList对象包含播放列表名称和一个歌曲的集合,MusicCollection对象包含播放列表集合,它包括一个名为Library的主播放列表,这个列表包含该集合中的所有歌曲。,创建一个Song对象,并设置其信息创建一个PlayList对象,并对播放列表添加和删除歌曲。如果一首新歌不在主列表中,将其添加进去。确保从主播放列表中删除一首歌时,也要从音乐集合中的其他播放列表中删除此歌曲创建一个MusicCollection对象,并对该集合添加和删除播放列表搜索并显示关于所有歌曲、播放列表或整个音乐集合的信息。确保所有你定义的类都不产生内存漏洞。,