美文网首页
strong和copy的用法

strong和copy的用法

作者: 萧修 | 来源:发表于2018-06-05 14:34 被阅读58次

一、提出问题。

问题一:

一个对象 的字符串用 copy进行修饰,外界修改这个字符串的数值,会导致引用的这个字符串数值修改吗?

NSMutableString *string = [NSMutableString stringWithString:@"origin"];//copy

NSString *stringCopy = [string copy];

[string appendString:@"origion!"]

1、string的内存地址和stringCopy的是否一样?

2、此时stringCopy的打印内容是什么?

问题二、

@property(nonatomic,copy)NSString * str1;

@property(nonatomic,strong)NSString*str2;

NSMutableString*str=[NSMutableString stringWithFormat:@"helloworld"];

self.str1=str;

self.str2=str;

1、str和str1的内存地址和str和str2的内存地址,是什么关系,相等,不相等?

2、[str appendString:@"hry"],经过这个方法之后,str1和str2的数值分别是多少?是不是都是 helloworldhry。

二、解决问题

字典,数组,字符串都有可变对象。

1、当我们把 可变对象通过 copy赋值一个 不可变对象或者可变对象,是深复制,也就是地址复制了一份,避免了原始可变对象的修改引起后来copy的对象的修改,上述问题2,srt1是属性copy,所以str的的变化不会引起str2的变化。但是str2使用 strong修饰,因为是地址复制了一份,指向的是同一块内容。原来地址内容发生变化,它的内容也会变化。

2、区分源头,上述是讲的可变对象,对于源头是不可变的对象,copy和strong修饰的变量,当第二次源头的字符串重新指向其它的地方的时候,它还是指向原来的最初的那个位置,也就是说其实二者都是指针引用,也就是浅拷贝。

三、为什么有这两个属性修饰

应该是用的场景不一样,当我们改变源头(源头是可变的)的时候,也期望引用这个源头的所有对象都会随着改变。而strong修饰象实现了这次的跟随改变。如果你用copy修饰不可变对象的话,copy产生的对象是不可变的,修饰可变对象发生崩溃。

源头对象用什么修饰,传递对象用什么修饰,最终使用对象用什么修饰。使用的对象希望跟随源头变化进行,中间属性修饰最好用strong,一层层传递。也可以采用其他编程方法。

本文侧重,讲述copy和strong的区别和用法。场景很多。

相关文章

  • strong和copy的用法

    一、提出问题。 问题一: 一个对象 的字符串用 copy进行修饰,外界修改这个字符串的数值,会导致引用的这个字符串...

  • iOS【copy,strong,retain,weak和assi

    摘录:iOS中copy,strong,retain,weak和assign的区别 copy,strong,weak...

  • iOS 基础知识

    strong & copy 区别 strong & copy 区别 code

  • copy、strong、mutablecopy

    copy 和strong 1:修饰mutableArra @property (nonatomic,strong)...

  • copy详解

    copy的用法: 对于NSString这种不可变的建议用copy,对于可变用strong. 先来使用一下:MRC下...

  • iOS面试题:当NSString作为一个对象的属性时,是使用st

    NSString的strong和copy修饰的探究 对不可变字符串使用strong和copy修饰的探究 打印结果如...

  • copy和strong

    一、简单介绍copy 表示重新建立一个新的计数为1的对象,然后释放掉旧的值。比如NSString,copy就是新生...

  • strong和copy

    先来看一段代码,数据来源是不可变(immutable)的。 #import "ViewController.h"@...

  • Strong和Copy

    Strong修饰的属性: 等于是两个名称不同的变量指向同一块内存。除了变量名不一样,其他都是一个。 Copy: 生...

  • strong和 copy

    用strong 还是copy 一般NSArray 和 NSString 这种有可变子类的都用copy 修饰http...

网友评论

      本文标题:strong和copy的用法

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