NSCopy与NSMutableCopy技术点
来源:互联网 发布:手机看股软件 编辑:程序博客网 时间:2024/05/17 23:33
内存管理
NSString的copy实例
对象的copy实例
一、概念
目的:在改变原有对象的时候,不会改变新对象的值
Copy:实现NSCopying协议,创建的是一个不可变副本
MutableCopy:实现NSMutableCopying协议,创建的是一个可变副本
二、内
深拷贝:产生新的对象,所以源对象计数器不变>>>对象拷贝
浅拷贝:不产生新对象,所以源对象计数器加一>>>指针拷贝
三、NSString的copy实例
#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.必须实现NSCopying协议
2.需要重写- (id)copyWithZone:(NSZone *)zone方法
GoodStudent.h
#import "Student.h"@interface GoodStudent : Student@property (nonatomic, assign) int age;+(id)goodStudentWithName:(NSString *)name withAge:(int)age;@endGoodStudent.m#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
Student.h
#import <Foundation/Foundation.h>@interface Student : NSObject <NSCopying>@property (nonatomic, copy) NSString *name;+(id)studentWithName:(NSString*)name;@endStudent.m#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
#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;}
0 0
- NSCopy与NSMutableCopy技术点
- iOS NSCopy 和 NSMutableCopy
- NSObject-拷贝 NSCopy-NSMutablecopy
- 征服objective—c 的NScopy,NSMutablecopy
- OC学习 第十二章 深拷贝 浅拷贝 NSCopy NSMutablecopy
- Object-C对象复制:copy与mutableCopy、NScopying与NSMutableCopy
- Copy与NSMutableCopy以及“深复制” “浅复制”那些不为人知的秘密
- VS调试技术-断点与跟踪点
- VS调试技术-断点与跟踪点
- Java线程技术点与实例
- IT与DT技术几点解释
- 技术点
- 技术点
- 技术点
- 技术点
- 技术点
- 技术点
- 技术点
- 关于List子类调用subList(int from,int end)出现类型转换异常
- 转载:如何用数据驱动产品和运营
- malloc的内存分配之 malloc(0)的内存分配情况
- C#中sleep和wait的区别分析
- POJ-2299- Ultra-QuickSort-树状数组离散化
- NSCopy与NSMutableCopy技术点
- Android wifi无线调试App新玩法ADB WIFI
- (有码)NSURLConnection大文件下载
- Oracle 回滚(ROLLBACK)和撤销(UNDO)
- Payback--贪心
- source insight 快捷键
- redis事务处理
- UIControl 详解
- 3Sum Closest-双指针