转载请注明:http://www.cnblogs.com/letougaozao/p/3631105.html
一、概念
目的:在改变原有对象的时候,不会改变新对象的值
二、内存管理
三、NSString的copy实例
// // main.m // Copy语法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> void test1() { NSString *str = [NSString stringWithFormat:@"age is %i", 10]; NSString *str1 = [str copy]; NSLog(@"%i", str == str1); NSString *str2 = [str mutableCopy]; NSLog(@"%i", str2 == str); } void test2() { NSMutableString *str = [NSMutableString stringWithFormat:@"age is %i", 11]; NSString *str1 = [str copy]; NSMutableString *str2 = [str mutableCopy]; [str appendFormat:@"1"]; NSLog(@"%i", str == str2); NSLog(@"%i", str == str1); NSLog(@"%@", str); NSLog(@"%@", str1); } int main(int argc, const char * argv[]) { @autoreleasepool { test2(); } return 0; }
四、对象拷贝的实例
对象的拷贝,主要注意点
1??GoodStudent.h
// // GoodStudent.h // Student的Copy用法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import "Student.h" @interface GoodStudent : Student @property (nonatomic, assign) int age; +(id)goodStudentWithName:(NSString *)name withAge:(int)age; @end
2??GoodStudent.m
// // GoodStudent.m // Student的Copy用法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import "GoodStudent.h" @implementation GoodStudent +(id)goodStudentWithName:(NSString *)name withAge:(int)age { GoodStudent *stu = [super studentWithName:name]; stu.age = age; return stu; } -(id)copyWithZone:(NSZone *)zone { GoodStudent *copy = [super copyWithZone:zone]; copy.age = self.age; return copy; } -(NSString *)description { return [NSString stringWithFormat:@"%@-%i", self.name, self.age]; } @end
3??Student.h
// // Student.h // Student的Copy用法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> @interface Student : NSObject <NSCopying> @property (nonatomic, copy) NSString *name; +(id)studentWithName:(NSString*)name; @end
4??Student.m
// // Student.m // Student的Copy用法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import "Student.h" @implementation Student +(id)studentWithName:(NSString *)name { Student *stu = [[[[self class] alloc] init] autorelease]; stu.name = name; return stu; } - (id)copyWithZone:(NSZone *)zone { Student *copy = [[self class] allocWithZone:zone]; copy.name = self.name; return copy; } -(NSString *)description { return [NSString stringWithFormat:@"%@", self.name]; } -(void)dealloc { [_name release]; [super dealloc]; } @end
main.m
// // main.m // Student的Copy用法 // // Created by apple on 14-3-28. // Copyright (c) 2014年 apple. All rights reserved. // #import <Foundation/Foundation.h> #import "GoodStudent.h" void test1() { Student *stu = [Student studentWithName:@"name1"]; Student *stu1 = [stu copy]; NSLog(@"%@", stu); NSLog(@"%@", stu1); } void test2() { GoodStudent *stu1 = [GoodStudent goodStudentWithName:@"name1" withAge:10]; GoodStudent *stu2 = [stu1 copy]; NSLog(@"%@", stu1); NSLog(@"%@", stu2); } int main(int argc, const char * argv[]) { @autoreleasepool { test2(); } return 0; }
原文:http://www.cnblogs.com/letougaozao/p/3631105.html