weak/拷贝
1. weak
- 只要没有strong指针指向对象,该对象就会被销毁
2. 拷贝
- NSString和block用copy
- copy语法的作用
- 产生一个副本
- 修改了副本(源对象)并不会影响源对象(副本)
- 实现拷贝的方法
- copy: 返回的是不可变副本
- 可变字符串调用copy生成不可变的副本
- 副本与源对象(不可变的)的地址相同
- 自定义对象用copy即可(副本与源对象的地址不同),如果用strong则副本与源对象地址一样
- copy内部会调用copyWithZone方法
- 遵守NSCopying即可拥有copyWithZone方法
- 在set方法中调用copy
- 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:方法
- 创建新对象
- 给新对象的属性赋值
- 实现-copyWithZone:方法
时间: 2024-08-25 06:14:12