IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)(2)

简介: IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)(2)

3)、深复制Demo

Dog.h文件一样

Dog.m文件有点变化

#import <Foundation/Foundation.h>
#import "Dog.h"
@implementation Dog
@synthesize name;
@synthesize age;
-(id)copyWithZone:(NSZone *)zone
{
    Dog *dog = [[[self class] allocWithZone:zone] init];
//    dog.name = self.name;
    dog.name =  [self.name mutableCopy];
    dog.age = self.age;
    return dog;
}
@end

main.m文件一样

        Dog *dog1 = [Dog new];
        dog1.name = [NSMutableString stringWithString:@"chen"];
        dog1.age = 1;
        NSLog(@"dog1.name is %@ and age is %d", dog1.name, dog1.age);
        //深复制
        Dog *dog2 = [dog1 copy];
//        dog2.name = [NSMutableString stringWithString:@"li"];
        [dog2.name replaceCharactersInRange:NSMakeRange(1, 2) withString:@"hel"];
        dog2.age = 20;
        NSLog(@"dog2.name is %@ and age is %d", dog2.name, dog2.age);
        NSLog(@"dog1.name is %@ and age is %d", dog1.name, dog1.age);

4)、运行结果

2018-07-15 19:13:08.751335+0800 cyTest[27529:9427019] dog1.name is chen and age is 1
2018-07-15 19:13:08.751686+0800 cyTest[27529:9427019] dog2.name is cheln and age is 20
2018-07-15 19:13:08.751885+0800 cyTest[27529:9427019] dog1.name is chen and age is 1

4、setter方法的复制选项

我们setter方法复制选项的时候,如果加了copy属性,比如setName方法

-(void)setName : (NSMutableStrinfg *)name
{
    self.name  = [name copy];
}
#import <Foundation/Foundation.h>
#import "Dog.h"
@implementation Dog
@synthesize name;
@synthesize age;
@end

所以当对象设置了name属性的话,就不能再改变了,如下demo

Dog.h

#import <Foundation/Foundation.h>
#ifndef Dog_h
#define Dog_h
@interface Dog : NSObject
@property (nonatomic, copy) NSMutableString *name;
@property (nonatomic, assign) int age;
@end
#endif /* Dog_h */

Dog.m

#import <Foundation/Foundation.h>
#import "Dog.h"
@implementation Dog
@synthesize name;
@synthesize age;
@end

main.m

        Dog *dog1 = [Dog new];
        dog1.name = [NSMutableString stringWithString:@"chen"];
        dog1.age = 1;
        [dog1.name appendString:@"hello"];

运行结果

2018-07-15 19:22:17.736557+0800 cyTest[27853:9436238] -[NSTaggedPointerString appendString:]: unrecognized selector sent to instance 0xa0000006e6568634
2018-07-15 19:22:17.739655+0800 cyTest[27853:9436238] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString appendString:]: unrecognized selector sent to instance 0xa0000006e6568634'
*** First throw call stack:
(
  0   CoreFoundation                      0x0000000104fd61e6 __exceptionPreprocess + 294
  1   libobjc.A.dylib                     0x000000010466b031 objc_exception_throw + 48
  2   CoreFoundation                      0x0000000105057784 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
  3   CoreFoundation                      0x0000000104f58898 ___forwarding___ + 1432
  4   CoreFoundation                      0x0000000104f58278 _CF_forwarding_prep_0 + 120
  5   cyTest                              0x0000000103d60438 main + 600
  6   libdyld.dylib                       0x0000000108a2f955 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
相关文章
|
8月前
|
iOS开发
iOS block修饰符用copy还是strong
iOS block修饰符用copy还是strong
100 0
|
自然语言处理 开发工具 Swift
移动用户反馈-iOS接入指南 | 学习笔记
快速学习移动用户反馈-iOS接入指南
221 0
移动用户反馈-iOS接入指南 | 学习笔记
|
开发工具 git iOS开发
iOS开发 - 不小心删除了Copy Bundle Resources怎么办?(多人开发频繁添加删除图片导致图片路径重复,编译报错)
iOS开发 - 不小心删除了Copy Bundle Resources怎么办?(多人开发频繁添加删除图片导致图片路径重复,编译报错)
173 0
iOS开发 - 不小心删除了Copy Bundle Resources怎么办?(多人开发频繁添加删除图片导致图片路径重复,编译报错)
|
iOS开发
iOS开发 - 不用copy修饰的字符串属性什么情况下不安全
iOS开发 - 不用copy修饰的字符串属性什么情况下不安全
66 0
|
小程序 前端开发 Shell
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
快速学习接入 mPaaS 小程序并实现启动 iOS 版。
561 0
接入 mPaaS 小程序并实现启动 iOS 版| 学习笔记
|
移动开发 小程序 前端开发
iOS 端自定义开发(二)| 学习笔记
快速学习 iOS 端自定义开发。
171 0
iOS 端自定义开发(二)| 学习笔记
|
移动开发 JSON 小程序
iOS 端自定义开发(一)| 学习笔记
快速学习 iOS 端自定义开发。
222 0
iOS 端自定义开发(一)| 学习笔记
|
小程序 IDE API
iOS 端预览和调试小程序| 学习笔记
快速学习 iOS 端预览和调试小程序。
203 0
iOS 端预览和调试小程序| 学习笔记
|
小程序 Shell 开发工具
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
快速学习接入 mpaas 小程序并实现启动 IOS 版
189 0
接入 mpaas 小程序并实现启动 IOS 版|学习笔记
|
移动开发 人工智能 小程序
iOS 端自定义开发(二)|学习笔记
快速学习iOS 端自定义开发(二)
178 0