OC通讯录(MRC手动管理内存)
来源:互联网 发布:螳螂虾攻击力知乎 编辑:程序博客网 时间:2024/06/05 06:19
// ****** 获取姓名首字母 ********
// ****** NSString+Characters.h文件
#import <Foundation/Foundation.h>
@interface NSString (Characters)
- (NSString *)charactersGroupName;
@end
// ********NSString+Characters.m文件#import "NSString+Characters.h"
@implementation NSString (Characters)
- (NSString *)charactersGroupName
{
NSString *string = [selfuppercaseString];
return [stringsubstringToIndex:1];
}
@end
// ****** 创建一个Person类 ******
// ****** Person.h文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,retain)NSString *name;
@property(nonatomic,assign)int age;
@property(nonatomic,retain)NSString *sex;
@property(nonatomic,retain)NSString *num;
@property(nonatomic,retain)NSString *groupName;
- (instancetype)initWithName:(NSString *)name // 重写初始化
Age:(int)age
Sex:(NSString *)sex
Num:(NSString *)num;
+ (instancetype)personWithName:(NSString *)name // 便利构造器
Age:(int)age
Sex:(NSString *)sex
Num:(NSString *)num;
- (void)description; // 重写description方法
@end
// ****** Person.m文件
#import "Person.h"
#import "NSString+Characters.h"
@implementation Person
- (instancetype)initWithName:(NSString *)name
Age:(int)age
Sex:(NSString *)sex
Num:(NSString *)num
{
_name = name;
_age = age;
_sex = sex;
_num = num;
_groupName = [namecharactersGroupName]; //通过姓名得到组名
returnself;
}
+ (instancetype)personWithName:(NSString *)name
Age:(int)age
Sex:(NSString *)sex
Num:(NSString *)num
{
Person *p = [[[Personalloc] initWithName:nameAge:age Sex:sexNum:num] autorelease];
return p;
}
- (void)description
{
NSLog(@"姓名:%@年龄:%d 性别:%@号码:%@ 分组:%@",self.name,self.age,self.sex,self.num,self.groupName);
}
- (void)dealloc // 重写dealloc方法
{
[_namerelease];
[_sexrelease];
[_numrelease];
[_groupNamerelease];
[superdealloc];
}
@end
// ****** 通讯录功能实现 ******
// ****** AddressBook.h文件
#import <Foundation/Foundation.h>
@class Person;
@interface AddressBook : NSObject
@property(nonatomic,retain)NSMutableDictionary *allPersonDic;
- (instancetype)init;
+ (instancetype)addressBook;
// 3.)添加联系人
- (BOOL)addPerson:(Person *)aPerson;
// 4.)根据号码查找联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
// 5.)根据性别查找联系人,并将查到的联系人按照年龄升序排序
- (NSArray *)findPersonsWithSex:(NSString *)aSex;
// 6.)根据姓名,更改联系人信息
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(int) aAge;
// 7.)按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName;
// 8.)删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName;
// 9.)展示通讯录中的所有联系人信息
- (void)showAll;
@end
// ****** AddressBook.m文件#import "AddressBook.h"
#import "Person.h"
#import "NSString+Characters.h"
@implementation AddressBook
- (instancetype)init
{
self = [superinit];
if (self) {
self.allPersonDic = [NSMutableDictionarydictionary];
}
returnself;
}
+ (instancetype)addressBook
{
AddressBook *add = [[[AddressBookalloc] init]autorelease];
return add;
}
- (void)dealloc
{
[_allPersonDicrelease];
[superdealloc];
}
// 3.)添加联系人
- (BOOL)addPerson:(Person *)aPerson
{
// 判断姓名、电话是否为空,分组是否存在
BOOL isNameNil = aPerson.name ==nil;
BOOL isNumNil = aPerson.num ==nil;
BOOL isGroupExist = [[_allPersonDicallKeys] containsObject:aPerson.groupName];
// 当姓名、电话不为空,分组存在时
if (!isNameNil && !isNumNil && isGroupExist) {
// 遍历字典,找到对应的组
for (NSString *keyin _allPersonDic) {
NSMutableArray *array =_allPersonDic[key];
if ([keyisEqualToString:aPerson.groupName]) {
// 遍历组,判断是否重名
for (Person *pin array) {
if (p.name == aPerson.name) {
NSLog(@"此联系人已存在,添加失败!!!");
returnNO;
}
}
// 遍历之外添加联系人
NSLog(@"添加成功");
[array addObject:aPerson];
returnYES;
}
}
}elseif (!isNameNil && !isNumNil) { // 当分组不存在时,创建分组
[_allPersonDicsetValue:[NSMutableArrayarrayWithObject:aPerson] forKey:aPerson.groupName];
NSLog(@"添加成功");
returnYES;
}else {
NSLog(@"添加失败!!!姓名或号码不能为空!!!");
returnNO;
}
returnNO;
}
// 4.)根据号码查找联系人
- (Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
Person *per =nil;
for (NSArray *arrayin [_allPersonDicallValues]) {
for (Person *pin array) {
if (p.num == aPhoneNum) {
per = p;
return per;
}
}
}
NSLog(@"没有该联系人");
return per;
}
// 5.)根据性别查找联系人,并将查到的联系人按照年龄升序排序
- (NSArray *)findPersonsWithSex:(NSString *)aSex
{
NSMutableArray *nma = [NSMutableArrayarray];
for (NSArray *arrayin [_allPersonDicallValues]) {
for (Person *pin array) {
if (p.sex == aSex) {
[nma addObject:p];
}
}
}
NSComparator comSex = ^(Person *p1,Person *p2){
if (p1.age > p2.age) {returnNSOrderedDescending;}
elseif(p1.age < p2.age){returnNSOrderedAscending;}
else {returnNSOrderedSame;}
};
NSArray *arr = [nmasortedArrayUsingComparator:comSex];
return arr;
}
// 6.)根据姓名,更改联系人信息
- (BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(int) aAge
{
// 根据姓名找到联系人
for (NSArray *arrin [_allPersonDicallValues]) {
for (Person *pin arr) {
if ([p.nameisEqualToString:name]) {
[p setName:name];
[p setNum:aNum];
[p setSex:aSex];
[p setAge:aAge];
[p setGroupName:[namecharactersGroupName]];
NSLog(@"修改成功");
returnYES;
}
}
}
NSLog(@"修改失败,没有此联系人");
returnNO;
}
// 7.)按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
for (NSMutableArray *arrin [_allPersonDicallValues]) {
for (Person *pin arr) {
if ([p.nameisEqualToString:aPersonName]) {
[arr removeObject:p];
NSLog(@"删除成功");
returnYES;
}
}
}
NSLog(@"删除失败");
returnNO;
}
// 8.)删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
for (NSString *keyin _allPersonDic) {
if ([keyisEqualToString:aGroupName]) {
[_allPersonDicremoveObjectForKey:aGroupName];
NSLog(@"分组删除成功");
returnYES;
}
}
NSLog(@"该分组不存在");
returnNO;
}
// 9.)展示通讯录中的所有联系人信息
- (void)showAll
{
for (NSArray *arrin [_allPersonDicallValues]) {
for (Person *pin arr) {
[p description];
}
}
}
@end
// ****** main.m文件 ******
#import <Foundation/Foundation.h>
#import "NSString+Characters.h"
#import "Person.h"
#import "AddressBook.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
/*
main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能:
1).使用便利构造器创建四个Person类的实例(联系人).
姓名:Lucy性别:女电话:123 年龄:21
姓名:Joe性别:男电话:456 年龄:17
姓名:Baby性别:女电话:789 年龄:27
姓名:Linda性别:女电话:000 年龄:20
2).创建一个AddressBook类的实例对象(通讯录).
3).使用AddressBook类中定义的方法实现:添加联系人,将四个联系人添加到通讯录中.
4).使用AddressBook类中定义的方法实现:根据电话查找联系人,并打印(查找电话:456);
5).使用AddressBook类中定义的方法实现:根据性别查找联系人,并将查到的联系人按照年龄升序排序,并打印(查找性别:女)
6).使用AddressBook类中定义的方法实现:根据姓名,更改联系人信息.(修改Linda的信息:性别:女电话:012 年龄:25);
7).使用AddressBook类中定义的方法实现:按照姓名删除联系人,并展示通信录中所有人信息.(删除联系人:Baby)
8).使用AddressBook类中定义的方法实现:删除一个分组,并展示通信录中所有人信息.(删除L组)
9).使用AddressBook类中定义的方法实现:实现3~8之间每个功能后,输出通讯录中所有联系人信息。
*/
Person *p1 = [PersonpersonWithName:@"Lucy"Age:21Sex:@"女"Num:@"123"];
Person *p2 = [PersonpersonWithName:@"Joe"Age:17Sex:@"男"Num:@"456"];
Person *p3 = [PersonpersonWithName:@"Nany"Age:27Sex:@"女"Num:@"798"];
Person *p4 = [PersonpersonWithName:@"Linda"Age:20Sex:@"女"Num:@"000"];
[p1 description];
AddressBook *add = [AddressBookaddressBook];
// 3.)添加联系人
NSLog(@"=============添加联系人 ==============");
[add addPerson:p1];
[add addPerson:p2];
[add addPerson:p3];
[add addPerson:p4];
[add addPerson:p1];
NSLog(@"======================================");
// 4.)根据电话查找某个联系人
NSLog(@"==========根据姓名查找联系人 ===========");
[[add findPersonWithPhoneNum:@"123"]description];
NSLog(@"======================================");
// 5.)根据性别查找联系人,并将查到的联系人按照年龄升序排序
NSLog(@"==========根据性别查找联系人 ===========");
NSArray *arr = [addfindPersonsWithSex:@"女"];
for (int i =0; i <arr.count; i++) {
[arr[i] description];
}
NSLog(@"======================================");
// 6.)根据姓名,更改联系人信息
NSLog(@"===========更改联系人信息 =============");
[add changePersonWithName:@"Lucy"phoneNum:@"666"sex:@"男"age:61];
[[add findPersonWithPhoneNum:@"666"]description];
NSLog(@"======================================");
// 7.)按照姓名删除联系人
NSLog(@"==========按照姓名删除联系人 ===========");
[add deletePersonWithName:@"Linda"];
NSLog(@"======================================");
// 8.)删除一个分组
NSLog(@"============删除一个分组 ==============");
[add deleteGroup:@"L"];
NSLog(@"======================================");
// 9.)展示通讯录中的所有联系人信息
NSLog(@"======展示通讯录中的所有联系人信息 =======");
[add showAll];
}
return0;
}
- OC通讯录(MRC手动管理内存)
- OC-025.OC手动MRC内存管理@property的使用方法
- OC 内存管理之MRC
- OC内存管理(二)--MRC
- 内存泄露之手动内存管理(MRC)
- OC-手动内存管理
- OC内存管理,MRC,手动引用计数,ARC,自动引用计数
- 黑马程序员-[OC语言] 第三篇:MRC手动内存管理总结
- 黑马程序员---OC基础---内存管理(MRC、ARC)
- OC-049.集合中的内存管理(MRC和ARC)
- iOS MRC手动内存管理 心得体会
- iOS MRC手动内存管理 心得体会
- 苹果开发 手动内存管理MRC
- 手动内存管理(MRC)转ARC
- OC-内存管理(MRC)代码规范
- OC内存管理--MRC&ARC
- OC内存管理 MRC与ARC
- OC中内存管理之MRC
- IT人的技术积累博客开张,用于记录一些平时的问题供自己看,其它人搜到仅供参考
- KindEditor编辑器结合EasyUi
- 黑马程序员--OC的Foundation框架之字典
- SVN学习笔记2 -- SVN相关操作
- HTML学习-网页主体标记body(二)
- OC通讯录(MRC手动管理内存)
- modbus通讯协议
- Java StringBuffer.setLength()方法
- 多个线程按顺序执行——join()
- 堆和栈的区别(转过无数次的文章)
- 原谅所有人,调整心理
- universal_image_loader缓慢
- [转] 10分钟掌握XML、JSON及其解析
- 【二维指针与数组】