浅拷贝就比如像引用类型,而深拷贝就比如值类型。
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
#import <Foundation/Foundation.h>
@interface NSMutableArray (test)
+(id)copyWithMutableArray:(NSMutableArray *)mulArr;
+(id)copywithArray:(NSArray *)Arr;
@end
NSMultableArray+test.m:#import "NSMultableArray+test.h"
@implementation NSMutableArray (test)
+(id)copyWithMutableArray:(NSMutableArray *)mulArr
{
NSMutableArray *mulArray = [NSMutableArray arrayWithArray:[mulArr copy]];
return mulArray;
}
+(id)copywithArray:(NSArray *)Arr
{
NSArray *Array = [NSArray arrayWithArray:[Arr copy]];
return Array;
}
@end
main:#import <Foundation/Foundation.h>
#import "NSMultableArray+test.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSMutableArray *mutableArray = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *mularr = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",nil];
mutableArray = [NSMutableArray copyWithMutableArray:mularr];
NSLog(@"%@",mutableArray);
NSArray *array = [[NSArray alloc] initWithObjects:@"4",@"5",@"6",nil];
mutableArray = [NSMutableArray copywithArray:array];
NSLog(@"%@",mutableArray);
}
return 0;
}
结果:2013-08-05 20:35:41.152 作业2[3062:303] (
1,
2,
3
)
2013-08-05 20:35:41.154 作业2[3062:303] (
4,
5,
6
)
#import <Foundation/Foundation.h>
@protocol protocolText <NSObject>
@optional
-(void)Excise;//做题目
-(void)ReceivePager;//收试卷
@end
Student.h:#import <Foundation/Foundation.h>
#import "protocolText.h"
@interface Student : NSObject<protocolText>
@property(nonatomic,retain) id<protocolText> stuDelegate;
-(void)receive;//叫老师收试卷
-(void)Excise; //学生做试卷
@end
Student.m:#import "Student.h"
@implementation Student
-(void)receive
{
if ([_stuDelegate respondsToSelector:@selector(ReceivePager)]) {
[_stuDelegate ReceivePager];
}
}
-(void)Excise
{
NSLog(@"学生做试卷");
}
- (void)dealloc
{
[_stuDelegate release];
[super dealloc];
}
@end
Teacher.h:#import <Foundation/Foundation.h>
#import "protocolText.h"
@interface Teacher : NSObject<protocolText>
@property(nonatomic,retain) id<protocolText> teaDelegate;
-(void)excise; //叫学生做试卷
-(void)SendPager;
-(void)ReceivePager;//老师收试卷
@end
Teacher.m:#import "Teacher.h"
@implementation Teacher
-(void)SendPager
{
NSLog(@"老师发试卷");
}
-(void)excise
{
if ([_teaDelegate respondsToSelector:@selector(Excise)]) {
[_teaDelegate Excise];
}
}
-(void)ReceivePager
{
NSLog(@"老师收试卷");
}
- (void)dealloc
{
[_teaDelegate release];
[super dealloc];
}
@end
main:#import <Foundation/Foundation.h>
#import "Student.h"
#import "Teacher.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student *stu = [[[Student alloc] init] autorelease];
Teacher *tea = [[[Teacher alloc] init] autorelease];
stu.stuDelegate = tea;
tea.teaDelegate = stu;
//老师发试卷
[tea SendPager];
//老师叫学生做试卷
[tea excise];
//学生叫老师收试卷
[stu receive];
}
return 0;
}
结果:2013-08-05 19:59:47.083 作业3[2817:303] 老师发试卷
2013-08-05 19:59:47.085 作业3[2817:303] 学生做试卷
2013-08-05 19:59:47.086 作业3[2817:303] 老师收试卷