zoukankan      html  css  js  c++  java
  • 体会NSString的copy属性

     转自 http://bukkake.iteye.com/blog/954259

    规范上NSString做属性都是写成copy的,理论上应该是复制了字符串而不是单纯的增加引用计数,其实问题只会出现在把NSMutableString赋值给NSString的时候。

    View Code 
     1 @interface Demo : NSObject
     2 {
     3     NSString *retainString;
     4     NSString *copyString;
     5 }
     6 
     7 @property (nonatomic, retain)NSString *retainString;
     8 @property (nonatomic, copy)NSString *copyString;
     9 @end
    10 
    11 @implementation Demo
    12 @synthesize retainString;
    13 @synthesize copyString;
    14 -(void)dealloc
    15 {
    16     [retainString release];
    17     [copyString release];
    18     [super dealloc];
    19 }
    20 
    21 @end
    22 
    23 Demo *o = [[Demo alloc] init];
    24 NSMutableString *s1 = [[NSMutableString alloc] initWithCapacity:100];
    25 [s1 setString:@"fuckyou"];
    26 o.retainString = s1;
    27 o.copyString = s1;
    28 NSLog(@"retain string is %@", o.retainString);
    29 NSLog(@"copy string is %@", o.copyString);
    30 [s1 setString:@"fuckme"];
    31 NSLog(@"retain string is %@", o.retainString);
    32 NSLog(@"copy string is %@"


    这样就可以看出,当使用retain方式的时候,NSMutableString的内容变化时,语义上应该不可变的NSString也变化了,而用copy则是始终保持赋值时的内容。

     

    如果对实际类型就是NSString的对象用了copy,那其实就是retain,你可以通过观察引用计数来发现,而且就语义上来说也完全没有问题,同时也避免了不需要的字符串拷贝的消耗. 

  • 相关阅读:
    如何在windows下安装GIT
    TortoiseGit 安装
    高并发大流量专题---3、前端优化(减少HTTP请求次数)
    高并发大流量专题---2、流量优化(防盗链处理)
    高并发大流量专题---1、高并发大流量解决方案总结
    yii2和laravel比较
    php开发面试题---日常面试题1
    php开发面试题---禁用cookie之后,如何使用session
    剑指offer---4、序列化二叉树
    北风设计模式课程---20、UML类图介绍
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/2585728.html
Copyright © 2011-2022 走看看