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

  • 相关阅读:
    20160405小结
    [HTML表格]在databases显示行的附加信息
    [django]django+datatable简单运用于表格中
    [django]django xlrd处理xls中日期转换问题
    烦!
    【数据库】Navicat Premium12远程连接MySQL数据库
    关于定义变量名为"name"的坑!!!
    【前端】前端面试题整理
    Firebug控制台详解
    什么是跨域?跨域解决方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5230324.html
Copyright © 2020-2023  润新知