黑马程序员---OC基础补充---补充:copy与mutableCopy、单例模式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、copy与mutableCopy

使用某个对象的数据或者修改对象数据的时候为了不影响原有得内容,可以复制一个对象来使用其数据
1.使用前提
copy遵守NSCopying协议,实现copyWithZone方法;mutableCopy遵守NSMutableCopying协议,实现mutableCopyWithZone方法
2.内存管理
1)对象copy后,没有分配新的内存空间,是浅拷贝,源对象引用计数器加1
2)mutableCopy拷贝对象后,会给新对象分配内存空间,是深拷贝,两对象的引用计数器都为1
3)注意点:不管源对象是不是可变的,copy对象不可变,mutableCopy对象可变
3.@property中的内存管理策略选择
@property中copy为参数时,产生一个不可变副本赋值给实例变量
1)非ARC
——copy:只用于NSString\block
——retain:除了NSString\block以外的OC对象
——assign:基本数据类型、枚举、结构体
2)ARC
——copy:只用于NSString\block
——strong:除了NSString\block以外的OC对象
——weak:当两个对象循环引用,一个用weak,另一个用strong
——assign:基本数据类型、枚举、结构体
4.为自定义的类实现copy操作
1)让该类遵守NSCopying协议
@interface Person: NSObject<NSCopying>
@end
2)实现copyWithZone方法,返回一个对象的副本
3)在copyWithZone方法中,创建一个新的对象,并设置其数据类型与现有对象一致,并返回对象
@implementation Person 
- (id)copyWithZone:(NSZone *)zone{
    NSLog(@"执行了copy方法");
    Person *p = [Person new];
    p.age = self.age;

    return p;
}
@end

二、单例模式

内存中只有一个对象实例,提供一个访问点,供客户类共享资源
1.使用要求
1)类只能有一个实例,且必须从一个为人熟知的访问点对其进行访问
2)该实例只能通过子类化进行扩展,且扩展对象不会破坏客户端代码
2.单例设计模式要点
1)其类只有一个实例
2)它必须自行创建这个对象
3)必须自行向整个系统提供这个实例
4)为保证实例唯一性,必须将以下方法进行覆盖:copyWithZone、allocWithZone、retain、retainCount、release、autorelease
5)这个类必须是一个静态类











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值