zoukankan      html  css  js  c++  java
  • @proprety数组字典字符串用copy和strong区别(深浅拷贝)

    //
    //  @proprety数组字典字符串用copy和strong区别(深浅拷贝).h
    //  IOS笔记
    //
    //

     /* _proprety________copy_strong_________h */
    /*
     定义属性时NSArray,NSString,NSDictionary为何要用copy
     
     定义一个Person类,并定义一下属性,并设置strong(深拷贝)
     @interface Person : NSObject
     
     @property (nonatomic, strong) NSString *name;
     @property (nonatomic, strong) NSArray *array;
     @property (nonatomic, strong) NSDictionary *dict;
     
     @end
     
     在main函数中添加下面代码
     NSMutableString *str = [[NSMutableString alloc] initWithString:@"aa"];
     Person *p1 = [[Person alloc] init];
     p1.name = str;
     [str appendString:@"bb"];
     NSLog(@" %@ %@", str, p1.name);
     NSLog(@" %p %p", str, p1.name);
     
     运行后得到以下结果:
     2015-09-15 17:32:32.259 DeepCopy[3876:1395529]
     aabb
     aabb
     2015-09-15 17:32:32.259 DeepCopy[3876:1395529]
     0x1003037c0
     0x1003037c0
     
     根据结果可以看出来两个字符串的地址是一样的,并且只要修改了一个,另一个的值也会变。
     下面将Person类中的strong改为copy,然后再次运行结果(浅拷贝)
     @property (nonatomic, copy) NSString *name;
     @property (nonatomic, copy) NSArray *array;
     @property (nonatomic, copy) NSDictionary *dict;
     
     运行结果:
     2015-09-15 17:34:14.917 DeepCopy[3895:1401270]
     aabb
     aa
     2015-09-15 17:34:14.918 DeepCopy[3895:1401270]
     0x10020a690
     0x616125
     此时两个字符串的地址不一样了,说明在给p1.name赋值的时候系统又创建了一块空间保存p1.name,这样两个字符串可以各自修改各自,互不影响了。其他两种类型也是同样的道理。一下是其他两个类型测试代码*/

  • 相关阅读:
    UML类图与类的关系详解
    hadoop中的Partition
    几种排序
    poj 1006
    Hadoop namenode无法启动
    String中intern的方法
    java
    模板方法模式
    里氏替换原则
    按字节数截取字符串
  • 原文地址:https://www.cnblogs.com/er-dai-ma-nong/p/5045674.html
Copyright © 2011-2022 走看看