zoukankan      html  css  js  c++  java
  • iOS之NSString类型为什么要用copy修饰

    在开发的过程中,只知道NSString类型最好用copy修饰而不能用strong,但是不知道为什么,今天了解了下,总算搞明白了。

     如下所示,当修饰符为copy时,因为NSMutableString是NSString类型的子类,所以可以用指针self.name指向mStr,但是我们知道copy的含义是指当重新赋值时深拷贝新对象再赋值给self.name,

    所以此时self.name的指针和mStr的指针指向的对象就不同了,所以当给mStr对象发送方法appendString的时候,修改的只是mStr(此时的值变为mutablestring----addstring),而self.name依然不变(mutablestring----);相反当修饰符为strong时,因为strong的意思是指针指向原对象,并且引用计数+1,所以self.name和mStr指向同一个对象,当修改mStr时self.name也会一起变化。所以为了避免NSString类型的值被修改,一般建议用copy修饰符修饰。

    @interface ViewController ()
    @property (nonatomic,copy) NSString *name;
    //@property (nonatomic,strong) NSString *name;
    @end
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        NSMutableString *mStr = [NSMutableString stringWithFormat:@"mutablestring----"];
        self.name = mStr;
        [mStr appendString:@"addstriing"];//name的修饰符为copy时,name的结果为mutablestring----
        NSLog(@"%@",mStr);//name的修饰符为strong时,name的结果为mutablestring----addstriing
        NSLog(@"%@",self.name);
    }
  • 相关阅读:
    实验楼挑战赛(1)-实现不可修改字典
    python django前端界面实现数据库数据excel导出
    python2中range和xrange的异同
    python的json模块的dumps,loads,dump,load方法介绍
    ajax500错误
    伪元素小tips
    使用css3制作蚂蚁线
    chardet坑——比蜗牛还慢
    Flask的socket.error:10053
    chrome插件开发-消息机制中的bug与解决方案
  • 原文地址:https://www.cnblogs.com/Caersi/p/6376213.html
Copyright © 2011-2022 走看看