文档章节

OC学习笔记九 类方法

卧龙小
 卧龙小
发布于 2014/10/02 23:39
字数 554
阅读 37
收藏 1

在OC 中,通过类直接调用的方法叫类方法,类方法执行效率高,但不能访问成员变量,通常用作于 工具方法


一声明部分

@interface Calculator : NSObject
{
    @public
    int _sum;
    int _avg;
}

/*
 对象方法:
 1.以-开头
 */
-(int)sumWithNum:(int)num1 andNum:(int)num2;
-(int)avgWithNum:(int)num1 andNum:(int)num2;

/*
 类方法:
 1.以+开头
 2.类方法可以和对象方法同名,系统会根据方法类型来区分
 */
+(int)sumWithNum:(int)num1 andNum:(int)num2;
+(int)avgWithNum:(int)num1 andNum:(int)num2;
@end


二 实现部分

@implementation Calculator
-(int)sumWithNum:(int)num1 andNum:(int)num2
{
    //对象方法可以访问成员变量
    _sum = num1+num2;
    return _sum;
}

-(int)avgWithNum:(int)num1 andNum:(int)num2
{
    //在对象方法中,可以直接访问类方法
    return [Calculator sumWithNum:num1 andNum:num2]/2;
}


+(int)sumWithNum:(int)num1 andNum:(int)num2
{
    
    /*
    类方法如果直接访问成员变量则报
    _sum = [[Calculator new] sumWithNum:num1 andNum:num2];
    instance varlalbe '_sum' accessed in class method
     
    [[Calculator new] sumWithNum:num1 andNum:num2]
    注意:在类方法中调用对象方法必须创建对象, 一般开发中不建议这样使用
    */
    return [[Calculator new] sumWithNum:num1 andNum:num2];
}

+(int)avgWithNum:(int)num1 andNum:(int)num2
{
    return (num1+num2)/2;
}
@end


三 主函数

int main(int argc, const char * argv[])
{
    
    /*
     对象方法:
     1.通过对象调用 [[ClassName new] functionName]
     2.以+开头
     3.可以访问成员变量
     */
     
    Calculator *c = [Calculator new];
    int _sum = [c sumWithNum:3 andNum:2];
    NSLog(@"对象方法调用:sum=%d",_sum);
    int _avg = [c avgWithNum:4 andNum:4];
    NSLog(@"对象方法调用:avg=%d",_avg);
    
    
    /*
     类方法:
     1.通过类名调用 [ClassName functionName];
     2.以+开头,其他和对象方法一样
     3.执行效率高
     4.不能访问成员变量
     */
    _sum = [Calculator sumWithNum:15 andNum:20];
    NSLog(@"类方法调用:sum=%d",_sum);
    
    _avg = [Calculator avgWithNum:4 andNum:4];
    NSLog(@"类方法调用:avg=%d",_avg);
    
    return 0;
}



总结

方法名 声明方式 调用方式 成员变量访问 调用对象方法 调用类方法
对象方法 -开头 对象调用 可以访问 直接调用 直接调用
类方法 +开头 类调用 不能访问 不能直接调用 直接调用

类方法的优点:

  1. 不依赖于类

  2. 执行效率高


类方法运用场景:

  1. 不需要使用成员变量的方法

  2. 用于编写工具方法


© 著作权归作者所有

卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
OC学习之旅 (一) 内存管理及OC常用方法

最近学习OC,所以在博客写下自己的笔记. OC的基本: 1 id 相当于java的Object 代表任何对象. 所以id是关键字,不能用作变量!! 2 oc中使用"."符号是调用 int a =object.a 是调用的是 [object ge...

Jonson
2013/04/13
2.4K
2
Objecitive-C中的nil

当我学习OC的时候,我总是忍不住在对比。Actionscript是如何实现,而oc又是如何实现。这不,碰到nil的时候我发现了很大的不同之处。做个笔记。 在as中,如果将一个对象置为null,相当于空指针...

ChildhoodAndy
2013/03/21
353
3

hjimce算法类博文目录 个人博客:http://blog.csdn.net/hjimce 个人qq:1393852684 知乎:https://www.zhihu.com/people/huang-jin-chi-28/activities 一、深度学习 深度学习(七十)darknet...

hjimce
2016/01/24
0
0
Scala 学习笔记 模式匹配

1. 模式匹配简介 模式匹配是 Scala 的重要特性之一,前面两篇笔记Scala学习笔记(六) Scala的偏函数和偏应用函数、Scala学习笔记(七) Sealed Class 和 Enumeration都是为了这一篇而铺垫准备的...

Tony沈哲
2017/05/16
0
0
iOS开发博客前言

学了iOS三年多(工作方面就还不够,呵呵),所以其中看了很多文章,也从大牛那里学了不少东西,摘抄下来很多笔记,现在太乱太杂,需要整理一下。所以,接下来要写的东西,是我从学习到工作的...

kelolo
2016/06/20
29
0

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
11分钟前
0
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
4
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部