• 【学习笔记】【OC语言】类方法


    1.基本概念
    直接可以用类名来执行的方法(类本身会在内存中占据存储空间,里面有类对象方法列表)

    2.类方法和对象方法对比
    1>对象方法
    以减号-开头
    只能让对象调用,没有对象,这个方法根本不可能被执行
    对象方法能访问实例变量(成员变量)

    2>类方法
    以加号+开头
    只能用类名调用,对象不能调用
    类方法中不能访问实例变量(成员变量)
    使用场合:当不需要访问成员变量的时候,尽量用类方法
    类方法和对象方法可以同名

    3.代码

     1 #import <Foundation/Foundation.h>
     2 /*
     3  对象方法
     4  1> 减号 - 开头
     5  2> 只能由对象来调用
     6  3> 对象方法中能访问当前对象的成员变量(实例变量)
     7  
     8  类方法
     9  1> 加号 + 开头
    10  2> 只能由类(名)来调用
    11  3> 类方法中不能访问成员变量(实例变量)
    12  
    13  
    14  类方法的好处和使用场合
    15  1> 不依赖于对象,执行效率高
    16  2> 能用类方法,尽量用类方法
    17  3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
    18  
    19  可以允许类方法和对象方法同名
    20  */
    21 
    22 
    23 @interface Person : NSObject
    24 {
    25     int age;
    26 }
    27 
    28 // 类方法都是以+开头
    29 + (void)printClassName;
    30 
    31 - (void)test;
    32 + (void)test;
    33 
    34 @end
    35 
    36 @implementation Person
    37 
    38 + (void)printClassName
    39 {
    40     // error:instance variable 'age' accessed in class method
    41     // 实例变量age不能在类方法中访问
    42     //NSLog(@"这个类叫做Person-%d", age);
    43 }
    44 
    45 - (void)test
    46 {
    47     NSLog(@"111-%d", age);
    48     
    49     //[Person test];
    50 }
    51 
    52 + (void)test
    53 {
    54     // 会引发死循环
    55     //[Person test];
    56     
    57     NSLog(@"333");
    58     
    59     // 会引发死循环
    60 //    /[Person test];
    61 }
    62 
    63 @end
    64 
    65 int main()
    66 {
    67     //[Person printClassName];
    68     
    69     [Person test];
    70     
    71     //Person *p = [Person new];
    72     //[p test];
    73     
    74     /*
    75      -[Person printClassName]: unrecognized selector sent to instance 0x7fa520c0b370
    76      */
    77     // 系统会认为现在调用的printClassName是个对象方法
    78     //[p printClassName];
    79     
    80     return 0;
    81 }
     
  • 相关阅读:
    C++ 多线程编程
    协程简介(coroutine)
    Yanhua Digimaster 3如何使用免焊适配器重置仪表板?
    Autel OTOFIX IM1 远程/在线技术支持指南
    Xhorse奥迪免焊适配器套装功能列表+常见问题
    如何通过 DDD 构建一辆汽车
    周末复习一波Linux,Linux常用命令总结,还有语法+案例
    Dubbo 基础知识
    GIT版本控制学习博客
    C++检测和定位内存泄漏
  • 原文地址:https://www.cnblogs.com/dssf/p/4644014.html
Copyright © 2020-2023  润新知