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:方法
      • 创建新对象
      • 给新对象的属性赋值
原文地址:https://www.cnblogs.com/HMJ-29/p/4758671.html