zoukankan      html  css  js  c++  java
  • weak和拷贝

    weak/拷贝

    1. weak

    • 只要没有strong指针指向对象,该对象就会被销毁

    2. 拷贝

    • NSString和block用copy

    • copy语法的作用

      • 产生一个副本
      • 修改了副本(源对象)并不会影响源对象(副本)
    • 实现拷贝的方法
      • copy: 返回的是不可变副本
        • 可变字符串调用copy生成不可变的副本
        • 副本与源对象(不可变的)的地址相同
        • 自定义对象用copy即可(副本与源对象的地址不同),如果用strong则副本与源对象地址一样
        • copy内部会调用copyWithZone方法
        • 遵守NSCopying即可拥有copyWithZone方法
        • 在set方法中调用copy
    重写copyWithZone:(NSZone *)zone方法
    {
       类名 *对象名称 = [[类名 allocWithZone] init];
       /*给属性赋值*/
       return 对象名称;
    }
    - (void)set属性:(类名 *)参数名称
    {
        _属性 = 参数;
    }
    + mutablecopy: 返回可变副本
        * 副本与源对象地址不同

    3. 浅拷贝和深拷贝

    源对象类型调用的拷贝方法副本对象类型是否产生了新对象拷贝类型
    NSMutableString copy NSString YES 深拷贝(内容拷贝)
    NSMutableString mutablecopy NSMutableString YES 深拷贝(内容拷贝)
             
    NSString copy NSString NO 浅拷贝(指针拷贝)
    NSString mutablecopy NSMutableString YES 深拷贝(内容拷贝)
    • 普通对象实现拷贝的步骤 _ 遵守NSCopying协议
      • 实现-copyWithZone:方法
        • 创建新对象
        • 给新对象的属性赋值
  • 相关阅读:
    oracle sql日期比较:
    vs 2008 过期问题
    silverlight带有复选框的列
    SQL 把一张表虚拟成两张表
    timeupdown
    ChildWindow 父窗体交互
    Debian CentOS修改时区
    如何优雅地使用命令行设置windows文件关联
    sql复制表结构,复制表内容语句
    VC6.0 中 添加/取消 块注释的Macro代码
  • 原文地址:https://www.cnblogs.com/HMJ-29/p/4758671.html
Copyright © 2011-2022 走看看