博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC之Copy语法
阅读量:5260 次
发布时间:2019-06-14

本文共 3557 字,大约阅读时间需要 11 分钟。

转载请注明:

  • 概念
  • 内存管理
  • NSString的copy实例
  • 对象的copy实例

一、概念

目的:在改变原有对象的时候,不会改变新对象的值

  1. Copy:实现NSCopying协议,创建的是一个不可变副本
  2. MutableCopy:实现NSMutableCopying协议,创建的是一个可变副本

二、内存管理

  1. 深拷贝:产生新的对象,所以源对象计数器不变>>>对象拷贝
  2. 浅拷贝:不产生新对象,所以源对象计数器加一>>>指针拷贝(因为对象本身不可以变,所有没有必要再创建一个对象)

三、NSString的copy实例

////  main.m//  Copy语法////  Created by apple on 14-3-28.//  Copyright (c) 2014年 apple. All rights reserved.//#import 
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方法
  3. 代码中 self class的引用

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 
@interface Student : NSObject
@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 
#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;}

 

转载于:https://www.cnblogs.com/letougaozao/p/3631105.html

你可能感兴趣的文章
impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)
查看>>
Wireshark基本介绍和学习TCP三次握手
查看>>
关于静态方法与非静态方法的执行效率
查看>>
<C - 文件操作> 2017-12-05
查看>>
在MsSQLServer2000上通过调用OLE创建二维条码
查看>>
好文转载—程序员的禅修之路
查看>>
Retrofit 入门学习
查看>>
模拟题 Right turn SCU - 4445
查看>>
【bzoj3172】 [Tjoi2013]单词 AC自动机
查看>>
【bzoj3325】[Scoi2013]密码 逆模拟Manacher
查看>>
文本替换
查看>>
Python学习记录
查看>>
SpringBoot启动跟踪
查看>>
vs2017和vs2019专业版和企业版
查看>>
UVA 12661 Funny Car Racing 有趣的赛车比赛(最短路,变形)
查看>>
POJ 3259 Wormholes 虫洞(负权最短路,负环)
查看>>
python已安装好第三方库,pycharm import时仍标红的解决办法
查看>>
python 并发编程 基于gevent模块实现并发的套接字通信
查看>>
截图工具
查看>>
BZOJ5059 前鬼后鬼的守护 【堆扩展】*
查看>>