OC-通讯录

//
//  Card.h
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Card : NSObject

@property (nonatomic, copy) NSString *contactName;
@property (nonatomic, assign) NSUInteger phoneNum;

+(instancetype)cardWithContanctName:(NSString *)newName andPhoneNum:(NSUInteger)newPoneNum;

@end
//
//  Card.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import "Card.h"

@implementation Card
@synthesize contactName,phoneNum;
+(instancetype)cardWithContanctName:(NSString *)newName andPhoneNum:(NSUInteger)newPoneNum{
    Card *card = [[Card alloc]init];
    card.contactName=newName;
    card.phoneNum=newPoneNum;
    return card;
}
@end
//
//  PhoneBook.h
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Card.h"
@interface PhoneBook : NSObject
@property (nonatomic, copy)NSString *masterName;
@property (nonatomic, strong)NSMutableArray *cards;

//展示当前电话本中所有联系人信息
-(void)showInfo;

//类方法的初始化
+(instancetype)phoneBookWithMasterName:(NSString *)name andCards:(NSArray *)cardAry;
//添加名片
-(void)addNewCard:(Card *)card;

//删除名片
-(void)deleteCard:(Card *)card;
-(void)deleteCardWithName:(NSString *)cardName;
-(void)deleteCardWithPoneNum:(NSUInteger)phoneNum;

//根据电话号码排序
-(void)sortByPhoneNumAsc;

//根据姓名排序
-(void)sortByNameAsc;

@end
//
//  PhoneBook.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import "PhoneBook.h"
#import "Card.h"
@implementation PhoneBook

@synthesize masterName,cards;

//类方法的初始化
#pragma mark 类方法得到对象
+(instancetype)phoneBookWithMasterName:(NSString *)name andCards:(NSArray *)cardAry{
    PhoneBook *book = [PhoneBook new];
    book.masterName=name;
    book.cards=[NSMutableArray arrayWithObject:cardAry];
    return book;
}

#pragma mark 展示信息
//展示当前电话本中所有联系人信息
-(void)showInfo{
    NSLog(@"show %@,",masterName);
    for (Card *card in cards) {
        NSLog(@"联系人信息:%@, 电话 %lu",card.contactName,card.phoneNum);
    }
}

//添加名片
#pragma mark 添加名片
-(void)addNewCard:(Card *)card{
    [cards addObject:card];
}

//删除名片
-(void)deleteCard:(Card *)card{
    [cards removeObject:card];
}

-(void)deleteCardWithName:(NSString *)cardName{
    for (int i=0; i<cards.count; ) {
        Card *card = [cards objectAtIndex:i];
        if ([card.contactName isEqualToString:cardName]) {
            [cards removeObject:card];
        }else{
            i++;
        }
    }
}
-(void)deleteCardWithPoneNum:(NSUInteger)phoneNum{
    for (int i=0; i<cards.count; ) {
        Card *card = [cards objectAtIndex:i];
        if (card.phoneNum==phoneNum) {
            [cards removeObject:card];
        }else{
            i++;
        }

    }
}

//根据电话号码排序
#pragma mark 根据号码排序
-(void)sortByPhoneNumAsc{
    for (int i=0; i<cards.count-1; i++) {
        for (int j=0; j<cards.count-1-i; j++) {
            if (((Card *)cards[j]).phoneNum > ((Card *)cards[j+1]).phoneNum) {
                [cards exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
}

//根据姓名排序
-(void)sortByNameAsc{
    for (int i=0; i<cards.count-1; i++) {
        for (int j=0; j<cards.count-1-i; j++) {
            if ([((Card *)cards[j]).contactName compare:((Card *)cards[j+1]).contactName] == NSOrderedDescending) {
                [cards exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
}

@end
//
//  main.m
//  通讯录
//
//  Created by 邱学伟 on 15/8/3.
//  Copyright (c) 2015年 邱学伟. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Card.h"
#import "PhoneBook.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
       //名片1
        Card *card1 = [Card new];
        card1.contactName = @"sunny";
        card1.phoneNum = 18363858590;

        //名片2
        Card *card2 = [Card cardWithContanctName:@"apple" andPhoneNum:18363858591];

        //名片3
        Card *card3 = [Card cardWithContanctName:@"ios" andPhoneNum:18363858592];

        //名片4
        Card *card4 = [Card cardWithContanctName:@"oc" andPhoneNum:18363858593];

        //名片5
        Card *card5 = [Card cardWithContanctName:@"ui" andPhoneNum:18363858594];

        //电话本1
        PhoneBook *phoneBook1 = [PhoneBook new];
        phoneBook1.masterName = @"lovke";
        phoneBook1.cards = [NSMutableArray array];//必须得初始化数组
        [phoneBook1.cards addObjectsFromArray:@[card1,card2]];

        //展示
        [phoneBook1 showInfo];

        //电话本2
        PhoneBook *phoneBook2 = [PhoneBook phoneBookWithMasterName:@"kehui" andCards:(NSArray *)card2];

        [phoneBook2 addNewCard:card1];
        [phoneBook2 addNewCard:card3];
        [phoneBook2 addNewCard:card4];
        [phoneBook2 addNewCard:card5];
        //展示
        [phoneBook2 showInfo];

//        //删除
//        [phoneBook2 deleteCard:card1];
//        //展示
//        [phoneBook2 showInfo];
//
//        //按姓名删除
//        [phoneBook2 deleteCardWithName:@"ui"];
//        //展示
//        [phoneBook2 showInfo];
//
//        //按电话号码删除
//        [phoneBook2 deleteCardWithPoneNum:18363858593];
//        //展示
//        [phoneBook2 showInfo];

        //电话本3
        PhoneBook *phoneBook3 = [PhoneBook phoneBookWithMasterName:@"qiuxuewei" andCards:(NSArray *)card1];

        [phoneBook3 addNewCard:card2];
        [phoneBook3 addNewCard:card3];
        [phoneBook3 addNewCard:card5];
        [phoneBook3 addNewCard:card4];
        [phoneBook3 showInfo];

        //电话排序
        [phoneBook3 sortByPhoneNumAsc];
        [phoneBook3 showInfo];

        //姓名排序
        [phoneBook3 sortByNameAsc];
        [phoneBook3 showInfo];
    }
    return 0;
}

运行结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 08-01

OC-通讯录的相关文章

OC 通讯录 中等难度

Contact.h #import <Foundation/Foundation.h> @interface Contact : NSObject { NSString *_name; NSString *_gender; NSInteger _age; NSString *_address; NSString *_phoneNumber; NSString *_group; } - (void)setName:(NSString *)name; - (NSString *)name; - (

用OC实现实现中等难度通讯录详解

用OC实现中等难度通讯录.需求:      1.定义联系人类Contact.实例变量:姓名(拼音,?字?大写).性别.电话号码. 住址.分组名称.年龄.?法:?定义初始化方法或便利构造器方法.显?联系人信息      2.在main.m中定义字典,分组管理所有联系人.分组名为26个大写的英文字母.      3.可以添加联系?对象,如果姓名或电话号码为空,添加失败.添加联系?到匹配的分组.      4.获取某个分组名称下所有联系人,并且按照姓名升序排列.      5.从通讯录中根据电话号码搜

(一〇一)集成静态库RHAddressBook实现OC访问通讯录

使用官方的AddressBook框架仅能使用C语言访问通讯录,十分不便,这里介绍集成第三方框架RHAddressBook的方法,该框架可以通过OC访问和操作通讯录. 该框架是一个静态库,集成比较复杂. 首先下载该框架:RHAddressBook,下面有关于集成的一些介绍,下面简单的介绍一下集成的过程. ①首先把静态库工程直接拖入自己的工程: ②选中自己的工程,工程配置中选择Build Phases,按照下图导入两个文件,点击左侧的加号添加即可. ③选择Build Settings,搜索Heade

OC之实现中级通讯录

//实现中级通讯录. /作业1: 实现通讯录.需求:        //1.定义联系人类Contact. 实例变量:姓名(拼音 首字母大写), 性别, 电话号码, 住址, 分组名称, 年龄. 方法: 自定义初始化方法(姓名 ,电话号码), 显示联系人信息.        //2./2.在main.m中定义字典, 分组管理所有联系人. 分组名为26个大写的英文字母.        //3.可以添加联系人对象, 如果姓名或电话号码为空, 添加失败.添加联系人到匹配的分组.        //4.获取

iOS 修改通讯录联系人地址(address)崩溃原因分析

目前项目中需要对iOS系统通讯录进行读取,修改操作.在进行对地址修改的时候,出现了一个奇怪现象: ● 如果contact没有address字段(或者一个全新的contact),对它的address进行修改是可以成功的, ● 如果这个人有过address字段,此时对它就行修改就崩溃.控制台打出: *** -[CFString release]: message sent to deallocated instance 0x81d26f0 这应该是一个僵尸对象,重复释放某一个对象.首先我对修改通讯录

iOS开发——图形编程OC篇&amp;(六)Quartz 2D高级使用(二)

Quartz 2D高级使用 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepathref 调用该方法相当于创建了一个路径,这个路径用来保存绘图信息. 2.把绘图信息添加到路径里边. 以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx 默认会在内部创建一个path用来保存绘图信息. 在图形上下文中有一块存储空间专门用来存储绘图信息,其实这块空间就是CGMutablePathRef. 3.把路径

iOS开发——网络编程OC篇&amp;Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

嵌入式&amp;iOS:回调函数(C)与block(OC)传 参/函数 对比

C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(int data_i32)); callBack.c 1).在doSomeThingCount函数,对运行次数自增,并调用参数--函数. void DSTCount(void(*CallBack)(int data_i32)) { static int numb = 0; numb++; (*Call

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

OC内存管理

OC内存管理 一.基本原理 (一)为什么要进行内存管理. 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等. 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效. 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也