15.7 练习
1.在文档中查找NSCalendarDate类,然后向类添加一个名为ElapsedDays的新category。在这个新category中,根据以下方法声明添加一个方法:
-(unsigned long)numberOfElapsedDays:(NSCalendarDate*)theDate;
让新方法应返回接收者到该方法的参数之间经过的天数。并编写一个测试程序来测试新方法。(提示:可参见years:months:days:hours:minutes:seconds:sinceDate:方法。)
2.修改本章为类AddressBook开发的lookup:方法,使之能够找出name的部分匹配。消息表达式
[myBook lookup:@“steve”]
应该匹配名称中任何位置包含字符串“steve”的记录。
3.修改本章为类AddressBook开发的lookup:方法,使之能够搜索地址簿以找到所有匹配,返回值为包含所有匹配的地址卡片的数组,或者若匹配不成功时,则返回nil。
4.在AddressCard类添加你选择的新字段,一些建议是将name字段分隔成姓氏和名字字段,并添加地址(可能包含单独的州、城市、邮编、国家字段)和电话号码字段。编写合适的setter和getter方法,并确保print方法和list方法能恰当地显示这些字段。
5.完成练习3之后,修改练习2的lookup:方法,使之能够对地址卡片中的所有字段进行搜索。能否想出一种方式设计AddressCard类和AddressBook类,使得后者不必了解存储在前者中的所有字段。
6.给定以下声明:
-(BOOL)removeName:(NSString*)theName;
在AddressBook类中添加RemoveName:方法,以便从地址簿中删除某条记录。
7.使用在第一部分中定义的Fraction类,根据任意一些值创建一个分数数组,编写代码计算数组中所有分数的和。
8.使用第一部分中定义的Fraction类,根据任意一些值创建一个可变的分数数组。使用类NSMutableArray的sortUsingSelector:方法给数组排序,向Fraction类中添加一个Comparison类型,并实现comparison方法。
9.定义三个新类,分别名为Song、PlayList和MusicCollection。Song对象包含着关于特定歌曲的信息,比如歌曲名、艺术家、专辑、歌曲长度等;PlayList对象包含播放列表名称和一个歌曲的集合;MusicCollection对象包含播放列表集合,它包括一个名为Library的主播放列表,这个列表包含该集合中的所有歌曲。定义上述的三个类,并编写方法实现下列任务:
·创建一个Song对象,并设置其信息。
·创建一个PlayList对象,并对播放列表添加和删除歌曲。如果一首新歌不在主列表中,那么将其添加进去。确保从主播放列表中删除一首歌时,也要从音乐集合中的其他播放列表中删除此歌曲。
·创建一个MusicCollection对象,并对该集合添加和删除播放列表。
·搜索并显示关于所有歌曲、播放列表或整个音乐集合的信息。
·确保所有你定义的类都不产生内存漏洞。
10.编写一个程序,它使用NSNumber对象的NSArray(其中每个NSNumber代表一个整数)并生成一个频率图表,列出每个整数和它在数组中的出现次数。