zoukankan      html  css  js  c++  java
  • 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函数则是深拷贝。

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

  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/lucan727/p/3877096.html
Copyright © 2011-2022 走看看