• 为啥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了;

  • 相关阅读:
    linux系统 ssh免密码登录服务器主机
    QPS TPS 并发数 响应时间
    mysqlmtop开源系统监控mysql数据库性能
    jenkins 自动化构建 部署 回滚配置
    实用Linux命令记录
    关于高并发的几个基础问题
    tcp四次挥手
    时序数据异常检测相关的问题记录
    判断时序数据的周期性
    最短路径问题
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5230324.html
Copyright © 2020-2023  润新知