zoukankan      html  css  js  c++  java
  • 为啥NSString的属性要用copy而不用retain

       之前学习生活中,知道NSString的属性要用copy而不用retain,可是不知道为啥,这两天我研究了一下,然后最终明确了.

    详细原因是由于用copy比用retain安全,当是NSString的时候,其有用copy和retain都行,当用NSMutableString,那么就要用copy,NSMutableString的值不会被改动,而用retain的时候,NSMutableString的值会被改动,详细情况,能够看以下的代码:


    #import <Foundation/Foundation.h>
    
    //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式
    @interface person : NSObject<NSCopying>
    @property (nonatomic,copy)NSString * name;

        person * p  = [[person alloc]init];
        
        NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"];
        p.name = name;
        
        [name appendString:@" word"];
        NSLog(@"%@",p.name);

    打印后结果是

    2014-07-05 17:08:44.170 DepthCopy[1399:303] hello
    Program ended with exit code: 0


    我们能够发现打印结果还是hello;

    再看以下用retain

    #import <Foundation/Foundation.h>
    
    //协议有两种方式,第一是以ing结尾形式,第二,以delegate结尾形式
    @interface person : NSObject<NSCopying>
    
    @property (nonatomic,retain)NSString * name;

        person * p  = [[person alloc]init];
        
        NSMutableString * name = [[NSMutableString alloc]initWithString:@"hello"];
        p.name = name;
        
        [name appendString:@" word"];
        NSLog(@"%@",p.name);

    打印结果是:
    2014-07-05 17:13:19.531 DepthCopy[1412:303] hello word
    Program ended with exit code: 0

    我们能够发现结果被改变了,成为了hello word;

    所以,由以上代码,能够看出copy比retain安全,也就能明确为啥NSString的属性要用copy而不用retain了;

  • 相关阅读:
    单线制DS18B20温度传感器LED数码管显示当前的温度值
    AD转换器的主要指标
    关于swiper动态更改,无法更新的悖论
    在360的兼容模式下关于innerHTML=“”,引发的问题
    比较两个字符串的相似度
    WebSocket使用
    事件绑定addEventListener
    插件开发优缺点
    插件开发宗旨
    学会用博客
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5230324.html
Copyright © 2011-2022 走看看