黑马程序员——OC类方法

------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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值