03-类方法与对象方法的区别

 

1、基本概念

  由对象来调用的方法称为对象方法

  直接可以用类名来执行(调用)的方法(类本身会在内存中占据存储空间,里面包含有类对象方法的列表)称为类方法。 

注:不是只有类方法列表存储在类的空间,对象方法列表也存储在类的空间。 

很好理解,因为不管是类方法还是对象方法,它们的声明都在@interface @end之间  ;实现都在@implementation @end之间。

2、类方法和对象方法对比

  (1) 对象方法

    1> 以减号 - 开头   

    2> 所有数据类型(返回值、参数)都必须写在小括号()里面,而且只有数据类型可以写在小括号()里面;

      3> 方法名遵循驼峰原则;

    4> 如果没有参数,方法名后面什么都不写,例如 - (void)lookMyPhone;

    5> 一个参数对应一个冒号 : ,冒号 也是方法名的一部分; 

      例如:- (void)sendMessage:(char *)message withPhoneNumber:(char *)number;

           方法名是  sendMessage:withPhoneNumber:

    6> 减号 - 不是方法名的一部分;

    7> 只能让对象调用,没有对象,这个方法根本不可能被执行;

    8> 对象方法可以访问实例变量(成员变量);

    9> 对象方法既可以调用对象方法,也可以调用类方法。

此处个人感觉需要注意的是:对象 和 对象方法 是不同的概念
     (1)对象方法只能让对象调用;类方法只能让类名调用。
     (2)对象不能调用类方法,但是对象方法可以调用类方法(这一点初学时容易迷糊)

 (3) 类方法

    1> 以加号 + 开头

    2> 所有数据类型(返回值、参数)都必须写在小括号()里面,而且只有数据类型可以写在小括号()里面;

    3> 方法名遵循驼峰原则;

    4> 如果没有参数,方法名后面什么都不写,例如 + (void)lookMyPhone;

    5> 一个参数对应一个冒号:,冒号:也是方法名的一部分;

      例如:+ (void)sendMessage:(char *)message withPhoneNumber:(char *)number;

          方法名是  sendMessage:withPhoneNumber: 

    6> 加号 + 不是方法名的一部分。

    7> 类方法只能用类名调用,对象不能调用

    8> 类方法不能访问实例变量(成员变量)

    9> 使用场合:当不需要访问成员变量的时候,尽量使用类方法

    10> 类方法可以调用自己的类方法,但不能调用自己,会出现死循环。

    11> 类方法可以作为工具方法。

  (3) 类方法可以和对象方法重名(即方法名完全一样),但是二者却是两个完全不同的方法,用方法前面的+ -号区别。

 3、使用场合不同

  (1)当方法中需要访问实例变量(成员变量)的时候,一定不能使用类方法,只能使用对象方法;

  (2)当方法中不需要访问实例变量(成员变量)的时候,类方法和对象方法都可以使用,但是尽量使用类方法;因为使用类方法可以节省内存,提高效率。

4、类方法和对象方法之间调用的区别

  (1) 类方法调用自己的类方法      可以

     (2) 类方法调用自己的对象方法     不可以

     (3) 对象方法调用自己的类方法     可以

     (4) 对象方法调用自己的对象方法    可以

注:类方法在调用类方法的时候,不能调用自己,会出现死循环。

人生之路,不忘初心,勿忘始终!
原文地址:https://www.cnblogs.com/xdl745464047/p/3997508.html