美文网首页
面试题注意点

面试题注意点

作者: 骑着雅迪小毛驴上班的老瞿 | 来源:发表于2017-12-13 22:36 被阅读0次

NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的

众所周知,我们知道,可变类型(NSMutableArray,NSMutableString等)是不可边类型(NSString,NSArray等)的子类,因为多态的原因,我们可以使用赋值指向子类对象,也就是我们可以使用不可边类型去接受可变类型。
1.当我们使用strong修饰A不可边类型的时候,并且使用B可变类型给A赋值,再去修改可变类型B值的时候,A所指向的值也会发生改变。引文strong只是让创建的对象引用计数器+1,并返回当前对象的内容地址,当我们修改B指向的内容的时候,A指向的内容也同样发生了改变,因为他们指向的内存地址是相同的,是一份内容。
2.当我们使用copy修饰A不可边类型的时候,并且使用B可变类型给A赋值,再去修改可变类型B值的时候,A所指向的值不会发生改变。因为当时用copy的修饰的时候,会拷贝一份内容出来,并且返回指针给A,当我们修改B指向的内容的时候,A指向的内容是没有发生改变的。因为A指向的内存地址和B指向的内存地址是不相同的,是两份内容
3.copy修饰不可边类型(NSString,NSArray等)的时候,且使用不可边类型进行赋值,表示浅拷贝,只拷贝一份指针,和strong修饰一样,当修饰的是可变类型(NSMutableArray,NSMutableString等)的时候,表示深拷贝,直接拷贝新一份内容,到内存中。表示两份内容。

如何令自己所写的对象具有拷贝功能?

必须遵循nscopying协议,如果想实现可变和不可边拷贝时,必须同时遵循nscoping和nsmutablecoping协议。并且实现

  • (id)copyWithZone:(NSZone *)zone;

相关文章

  • iOS底层原理-内存管理

    面试题 使用CADisplayLink、NSTimer有什么注意点?CADisplayLink、NSTimer会对...

  • 内存管理

    面试题 CADisplayLink,NSTimer 使用注意点 CADisplayLink,NSTimer会对ta...

  • 面试题注意点

    NSString为什么要用copy关键字,如果用strong会有什么问题?(注意:这里没有说用strong就一定不...

  • iOS底层原理 - 内存管理 之 定时器(一)

    面试题引发的思考: Q: 使用CADisplayLink、NSTimer有什么注意点? 循环引用:CADispla...

  • isa相关面试题分析

    面试题 1.内省方法isKindOfClass和isMemberOfClass 分析 首先注意的点re1,re2,...

  • iOS底层原理 - 探寻block本质(三)

    面试题引发的思考: Q: __block的作用是什么?有什么使用注意点? __block用于解决block内部无法...

  • 大厂面试为什么需要了解JVM

    如果你经常注意面试题,你会发现现在面试题多多少少会含有jvm相关的面试题,之前也把一些jvm面试题汇总了下:面试题...

  • iOS-内存管理

    面试题 使用CADisplayLink、NSTimer有什么注意点? 介绍下内存的几大区域 讲一下你对 iOS 内...

  • OC-内存管理

    直接看看下面的面试题 介绍一下内存的几大区域 使用 CDDisplayLink、NSTimer 有什么注意点 讲一...

  • 底层8:block copy

    面试题:__block的作用是什么?有什么使用注意点? 使用__block,编译器会将__block变量包装成为一...

网友评论

      本文标题:面试题注意点

      本文链接:https://www.haomeiwen.com/subject/ephtwxtx.html