zoukankan      html  css  js  c++  java
  • 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法

    四.OC基础--1.文档安装和方法重载,

      1. 在线安装
        xcode-> 系统偏好设置->DownLoads->Doucument->下载

      2. 离线安装
        百度xcode文档

      3. 方法重载: 是指在一个类中定义多个同名的方法
        在OC中没有重载

        

    2.self和super&static,

      self和super:
        1. self理解: 谁调用当前方法, self就代表谁.
        比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法
        在类方法中, self代表的是类, 因为只有类名才可以调用类方法.

        注意: 在对象方法中不要使用self调用类方法
           在类方法中不要使用self调用对象方法

        2. 获取当前对象的类: Person *p = [Person p];
          [p class] = [Person class] = Person

        3. 在对象方法中可以通过 self->_speed访问成员变量.

        4. super代表的是当前类的父类.

      static关键字:
        1. 在c语言中 static可以修饰局部变量、全局变量、函数
        2. 在OC中, 不能用来修饰实例变量和方法, 但是可以修饰局部变量, 全局变量

    3.继承和派生,

      继承格式:
        @interface Cat : Animal

        @end

      继承定义: 子类拥有了属性和方法.

      派生: 父类向下产生子类的过程称为派生

      继承的注意事项:
        1. 子类不能定义和父类同名的变量,但是可以继承父类的变量
        2. OC类支持单一继承,不支持多继承

        3.我们都知道objective C不能像C++一样支持多继承,但是在OC的使用经常会碰到需要使用多继承的情况。例如,ClassA中有methodA,ClassB中methodB,

         而现在需要使用这两个类中的方法。

        答案:通过协议可以实现oc中的多继承

    4.实例变量修饰符 ,

      作用范围:
      @public : 作用于所有的类
      @protected: 作用于当前类,子类(派生类)
      @private: 作用于当前类
      @package: 作用框架级别的

      默认情况下实例变量属于@protected修饰.

    5.私有变量&私有方法,

      定义格式:
        在.m文件当中定义
        @implementation Person : NSObject
        {
          int age; // 私有变量
        }

        // 不在.h文件中声明, 只在.m文件中实现
        -(void)run{

          NSLog(@"我是私有方法");
        }
        @end

        私有方法只能在当前文件中使用, 不能被子类继承.

    6.description方法

      1. description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址) ;

       Description方法包括类方法和对象方法。(NSObject类所包含)  

      2. 基本知识

          1)-description(对象方法)

            使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出。

          2)+description(类方法)

            使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@。

            使用@%打印对象如(“@%”,P)默认打印输出为<类名:内存地址>,虽然字符串也是对象,但字符串在使用@%打印时情况特殊。 

       3.打印对象

                

           那么应该怎么实现打印对象的所有属性呢?在类的实现中重写description方法。

       4.重写description方法,实现打印对象的所有属性

             

      5.区别

        +description方法决定了类对象的输出结果,即类本身

        -description方法决定了实例对象的输出结果,即Person创建的对象。

      6.打印补充

             

             

      7. 千万不要在description方法中同时使用%@和self
        - (NSString *)description {
          return [NSString stringWithFormat:@"%@", self];
        }
      同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法

  • 相关阅读:
    学会拒绝,把时间用在更重要的事情上
    5G即将到来!我们需要一部怎样的手机呢?
    互联网早期是如何发展起来的?
    程序员需要明白这九件事
    centos7安装出现license information(license not accepted)解决办法
    CentOS6.5下安装MySql5.7.17
    Linux操作系统下MySQL的安装 --转
    SecureCRT_教程--1(windows远程登录linux)
    CentOS-7中安装与配置Tomcat8.5
    CentOS7使用firewalld打开关闭防火墙与端口
  • 原文地址:https://www.cnblogs.com/jiayongqiang/p/5095222.html
Copyright © 2011-2022 走看看