zoukankan      html  css  js  c++  java
  • strong vs copy

    一、前言
              在这里,我通过实例去介绍strong和copy的区别(%p打印出来对象的地址)
         ViewController.h           
    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController
    
    @property(nonatomic,strong) NSString *name;
    @end
    ViewController.m
      - (void)viewDidLoad {
        [super viewDidLoad];
        NSMutableString *myName = [NSMutableString stringWithString:@"zhangsan"];
        self.name = myName;
        NSLog(@"myName's address:%p",myName);
        NSLog(@"self.name's address:%p",self.name);
    } 
            运行结果是:
    2015-07-21 16:38:50.911 Test[4369:2323491] myName's address:0x7967f4c0
    2015-07-21 16:38:50.912 Test[4369:2323491] self.name's address:0x7967f4c0
     
             而当我们把.h中的strong改成copy时,
    @property(nonatomic,copy) NSString *name;
            运行结果是:
    2015-07-21 16:40:09.938 Test[4394:2330879] myName's address:0x78deb9b0
    2015-07-21 16:40:09.938 Test[4394:2330879] self.name's address:0x78dea270
           对比可以发现:
            当我们使用strong时,myName对象和self.name的地址相同,说明两者指向的是同一个地址空间:0x7967f4c0
            而当我们把.h中name的strong改成copy时,myName和self.name地址不同,说明两者指向的是不同的地址空间。
              myName是:0x78deb9b0
                self.name是:0x78dea270
         这说明:当我们使用copy的时候表示拥有不同的存储空间,存放的是相同的内容。因此如果我们对myName进行修改,self.name是不会受到影响的。

      在ARC情况下,如果源字符串是NSString时,由于字符串不可变,所以不管是strong还是copy属性的对象,都是指向源对象,copy只是进行了浅拷贝。    

      而如果源字符串是NSMutableString的话,strong是强引用,只是增加了源字符串的引用计数,而copy则是对源字符串进行了深拷贝,产生了一个新的对象,而且开辟了新的内存空间。此时如果我们修改源字符串的值,那么strong特性的字符串也会跟着修改,而copy的则不变。

    * 大多情况下,建议使用copy,因为一般我们将对象声明为NSString时,都不希望它改变。

     总结:
      这里你应该学到:
        1、strong和copy的区别
        2、我们可以用%p打印出对象的地址。
  • 相关阅读:
    Windows Server 2008 R2 服务器系统安装及配置全过程图文详解
    c#多线程
    DevExpress之TreeList控件用作导航使用说明
    Windows操作系统下搭建Git服务器和客户端。
    D^3CTF 2021 8-bit-pub
    shiro-1.2.4反序列化分析踩坑
    *CTF2021 oh-my-bet
    无线网络密码破解初体验
    瑞昱rtl819x-SDK-v3.4.14b的watchdog分析
    RC4加密算法
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4665005.html
Copyright © 2011-2022 走看看