黑马程序员——OC类方法

来源:互联网 发布:c语言教程百度网盘 编辑:程序博客网 时间:2024/05/18 01:22
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



1、类方法概述 

          实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方 法前,你必须首先创建类的一个实例。 

       而类方法,比较起来,也就是说,不需要你创建一个实例。 +表示类方法,就是类调用方法,不依赖与任何对象的方法。 -表示是实例(对象)方法,只能是对象可调用,依赖与任何对象的方法。 



2、类方法的调用 

[类名称 类方法名称]; 

3、类方法使用注意事项: 

1)类方法可以和实例方法同名,这个并不影响使用,实例方法由实例对象访问调用,类方法要通 过类里访问调用,不会有交叉相互影响。

声明程序: 

//声明对象方法-(int)add:(int)num1 andNum2:(int)num2;//声明类方法+(int)add:(int)num1 andNum2:(int)num2;
调用程序:

        //通过cal对象调用其对象方法        int result=[cal add:32 andNum2:11];        //通过类名调用类方法        result= [Caculator add:22 andNum2:32];


 2)类方法也可以是从父类继承而来,子类可以重写类方法,如description类方法就可以在子类 里重新定义这个方法。

 3)类方法和实例方法一样在interface里声明,在implementation里实现。

 4)类方法只能被类调用执行,向实例对象发送类方法是不能被触发执行的。

 5)在类方法里使用了self,这个self执行的类对象class object而不是实例对象instance object。 

4、类方法的优点: 

1)节省内存空间 

2)提高了效率 

3)作为工具方法 

5、类方法的易犯错误 

1)在类方法中使用了类的成员变量 (在类方法中不能使用实例变量)。

在图中所示的方法是错的,程序会报错。若要使用,采用传参数的方法可以解决。


6、类方法与对象方法比较 

1)对象方法:以-号开头,可以使用成员变量,用对象调用对象方法 对象方法可以调用当前对象或者其他对象的方法(是通过将对象作为参数传入方法)如下 :

----- 调用当前对象的其他方法 

//通过类方法实现求两个数的平均值-(float)avg:(Caculator *)caculator{    //调用对象方法计算两个数的和    return [caculator sumNum1:caculator->_num1 andNum2:caculator->num2]/2.0f;}

---- 调用其他对象的方法 

<span style="font-size:12px;">@implementation Person   //在人的对象方法中,调用狗的对象方法-(void)feedDog:(Dog *)dog{    [dog eat:@"包子"];}@end</span>


----- 对象方法可以调用类方法 

//通过类方法实现求两个数的平均值-(float)avg:(Caculator *)caculator{    //调用类方法计算两个数的和    return [Caculator sumNum1:caculator->_num1 andNum2:caculator->num2]/2.0f;}

2)类方法:以+开头 不可以使用成员变量 。

--- 用类名调用类方法 

//通过类方法实现求两个数的平均值+(float)avg:(int)num1 andNum2:(int)num2{    //调用类方法计算两个数的和    return [Caculator sumNum1:num1 andNum2:num2]/2.0f;}

  

---类方法可以调用对象方法(是通过将对象作为参数传入方法)和类方法 

//通过类方法实现求两个数的平均值+(float)avg:(Caculator *)caculator{    //调用对象方法计算两个数的和    return [caculator sumNum1:caculator->_num1 andNum2:caculator->num2]/2.0f;}

----类方法不可以调用自身,会造成死循环 

+(void)test{    NSLog(@"调用类自身的方法");    [Calculator test];}
 

同名方法的区别: 可以通过方法名前面的+ - 号区分。 


7、OC类方法应用场景 

如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法 [Car run]。





0 0
原创粉丝点击