• oop思想和 对象的拷贝


    oop思想

           OOP(Object Oriented Programming)是一种编程思想,将对象作为程序的基本单元,将程序和数据封装其中,用以提高软件的重用性、灵活性和扩展性。基本概 念中包括对象、类、数据抽象、继承、动态绑定、封装、多态、消息传递等。

      面向对象的三大特性是:封装、继承和多态

       1: 封装属性与细节、公开接口

       2:oc只支持单继承(即只有一个父类,默认是NSobject)

       3: 同一基类的不同子类可以通过重载父类的方法,实现不一样的功能。

      

    对象的拷贝(copy):

      1 会产生一个新的对象,对象的内容与源对象相同。

      

      2 源对象与新对象使用不同的内存地址。

     

      3需要实现NSCopying或者NSMutableCopying协议才能使用 复制功能

     需要注意的时,新的引用计数是1.

     

    copy返回的是不可变的对象。

    mutablecopy 返回的是可变的对象。

      

    浅拷贝只复制对象本身,而不会复制对象引用的其它对象

    —深拷贝除了复制对象本身,还会复制对象所引用的其它对 象

     

     定义属性中的strong和copy关键字的差别。举例说明。

    声明一个对象的属性。用途的关键字copy

    @property(nonatomic,copy) NSMutableArray *books;

    则系统自动生成的set方法是:

    -(void)setBooks:(NSMutableArray *)books

    {

           _books=[books copy];/返回的是不可变对象   

    }

     

    如果将copy改成strong,则系统自动生成的set方法是

    -(void)setBooks:(NSMutableArray *)books

    {  

        _books=self.books;//返回的对象是不是可变的,要看本身是可变的还是不可变的,例如这个books是NSMutableArray *,所以是可变的。

    }

    浅拷贝还是深拷贝是在

    -(id)copyWithZone:(NSZone *)zone中看的。调用了copy函数则是深拷贝。

          但是如果两个对象是不可变的,而且内容相同。那么系统可能会自动优化,将两个对象指向同一个地址。即用的是同一片内存空间。

  • 相关阅读:
    LVS 模式
    修改RocketMQ的NameServer端口
    一次清理Hbase的oldWALs的过程
    Linux下删除文件系统空间不释放的问题
    HBase 强制删除表
    关闭Found duplicated code
    Java操作HDFS代码样例
    RocketMQ:Cannot allocate memory
    Storm的StreamID使用样例(版本1.0.2)
    android studio 编译sdk版降低报错解决方法
  • 原文地址:https://www.cnblogs.com/lucan727/p/3877096.html
Copyright © 2020-2023  润新知