• copyWithZone 的使用方法


    1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。

    2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本

    @protocol NSCopying

    - (id)copyWithZone:(NSZone *)zone;

    @end

    @protocol NSMutableCopying

    - (id)mutableCopyWithZone:(NSZone *)zone;

    @end


    3.用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息 

    4.实现copyWithZone方法,例:

           

    -(id)copyWithZone:(NSZone *)zone

    {

             Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];

             return stu;

    }

    对应main函数中:假设已经有一个Student对象stu1;

    则:Student stu2 = [stu1 copy];

    实现stu2是stu1的副本,这里是深复制,stu1和stu2分别对应不同内存。

    5. 如果你的类产生了子类,那么copyWithZone:方法也将

    被继承

    Student *stu = [[Student allocWithZone: zone] init];

     该方法应该改为: Student *stu = [[[self class] allocWithZone: zone]init];

     如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.

    摘自:http://blog.csdn.net/tskyfree/article/details/7999620

  • 相关阅读:
    读取库中的所有表名
    ADOX学习
    自己寫的AccessDBHelper
    C#中Split用法~
    SQL Server:查看SQL日志文件大小SQL脚本
    MS SQL2005 How to find the top 50 cpu execution time.
    跨浏览器的本地存储解决方案
    這個SQL 語句你真的看明白了嗎?
    一个简单的SQL最优写法讨论(1)
    Gmail的标签容纳的邮件数量有限制。
  • 原文地址:https://www.cnblogs.com/mengdongsky/p/4241227.html
Copyright © 2020-2023  润新知