OC可以告一段落了,OC总体来说确实不难,难点在于资料不多,且大部分是老外所写。而且OC语法与其他的常用语言如C、C++、Java、C#相差太大。老外的书写的固然好(国内一部分书基本都是照抄的,呵呵),但书的风格与我们习惯的不太一样,再经过翻译后,这些书对于初学者来说就很苦涩了,很容易被绕晕。个人认为先看国内写的书,基本掌握OC后,再去看国外的经典著作。
代理就是让一个类去完成自己想完成的工作,如我让他去买早点。代理提供了一种方法,这种方法可以使得类里面的类对象可以调用当前类的方法。 简单来说就是有个A类,A类里面声明了类B的对象,那么通过代理可以让B的对象调用A的方法.
也不一定非要是复合的这种情况才使用代理,两个独立的类也可以代理来调用对方的方法(想起了C++里面的招式,有两个类A,B,给B的方法传个A的对象,那么就可以调用A的方法了)。
这次是个复合、协议、代理的综合运用,模拟了通讯录的使用,在列表类可以选择联系人,显示所有联系人的基本情况,详细类里面显示详细信息、删除联系人。共1个主程序,2个类文件
俩个类文件的声明
俩个类文件的实现
代理就是让一个类去完成自己想完成的工作,如我让他去买早点。代理提供了一种方法,这种方法可以使得类里面的类对象可以调用当前类的方法。 简单来说就是有个A类,A类里面声明了类B的对象,那么通过代理可以让B的对象调用A的方法.
也不一定非要是复合的这种情况才使用代理,两个独立的类也可以代理来调用对方的方法(想起了C++里面的招式,有两个类A,B,给B的方法传个A的对象,那么就可以调用A的方法了)。
这次是个复合、协议、代理的综合运用,模拟了通讯录的使用,在列表类可以选择联系人,显示所有联系人的基本情况,详细类里面显示详细信息、删除联系人。共1个主程序,2个类文件
主程序:
//
// main.m
// Delegate 协议、代理、复合的综合
// Created by GPH on 14-7-1.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Detail.h"
#import "List.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
List *list1 = [List alloc];
list1.dataArr = [NSMutableArray
arrayWithCapacity:0];
//模拟数据
for (int i = 0; i < 5; i++)
{
NSDictionary *dic =
[NSDictionary
dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"联系人%d",i],@"name",
[NSString stringWithFormat:@"电话%d",i],@"tel",
[NSString stringWithFormat:@"住址%d",i],@"address",
[NSString stringWithFormat:@"邮箱%d",i],@"email",nil];
//添加进去
[list1.dataArr addObject:dic];
}
//显示所有联系人
[list1 showList];
//选择联系人
[list1 selectAPeople:2];
//显示详情
[list1.detial showDetail];
//删除当前的联系人
[list1.detial deleteTheContact];
}
return 0;
}
俩个类文件的声明
//
// List.h
// Delegate
//
// Created by GPH on 14-7-1.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Detail.h"
//遵守协议,以便被调用
@interface List : NSObject<deleteDelegate>
//存放字典
@property(nonatomic,retain) NSMutableArray* dataArr;
@property(nonatomic,retain) Detail *detial;
-(void)showList;
//要看这个人的详情
-(void)selectAPeople:(int)row;
@end
//
// Detail.h
// Delegate
//
// Created by GPH on 14-7-1.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol deleteDelegate <NSObject>
-(void)removeObject:(NSDictionary*)dic;
@end
@interface Detail : NSObject
@property(nonatomic,assign)id<deleteDelegate>delegate;
@property(nonatomic,retain) NSDictionary *detail;
-(void)showDetail;
//删除
-(void)deleteTheContact;
@end
俩个类文件的实现
//
// List.m
// Delegate
//
// Created by GPH on 14-7-1.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#import "List.h"
@implementation List
//显示所有
-(void)showList
{
for (int i = 0; i < [self.dataArr count]; i++)
{
NSLog(@"姓名:%@,电话%@",
[[self.dataArr objectAtIndex:i]objectForKey:@"name"],
[[self.dataArr objectAtIndex:i]objectForKey:@"tel"]);
}
}
//要看这个人的详情
-(void)selectAPeople:(int)row
{
self.detial = [Detail alloc];
self.detial.detail = [self.dataArr objectAtIndex:row];
self.detial.delegate = self;
}
-(void)removeObject:(NSDictionary *)dic
{
[self.dataArr removeObject:dic];
//刷新一下
[self showList];
}
@end
//
// Detail.m
// Delegate
//
// Created by GPH on 14-7-1.
// Copyright (c) 2014年 GPH. All rights reserved.
//
#import "Detail.h"
@implementation Detail
-(void)showDetail
{
NSLog(@"姓名:%@,电话:%@,住址:%@,邮箱:%@",
[self.detail objectForKey:@"name"],
[self.detail objectForKey:@"tel"],
[self.detail objectForKey:@"address"],
[self.detail objectForKey:@"email"]);
}
-(void)deleteTheContact
{
NSLog(@"这个人 %@ 被删了",[self.detail objectForKey:@"name"]);
[self.delegate removeObject:self.detail];
}
@end
效果:
姓名:联系人0,电话电话0
姓名:联系人1,电话电话1
姓名:联系人2,电话电话2
姓名:联系人3,电话电话3
姓名:联系人4,电话电话4
姓名:联系人2,电话:电话2,住址:住址2,邮箱:邮箱2
这个人 联系人2 被删了
姓名:联系人0,电话电话0
姓名:联系人1,电话电话1
姓名:联系人3,电话电话3
姓名:联系人4,电话电话4