Objective-C方法与函数的区别

  • 方法是唯对象所有
  • 函数是不依赖于对象存在的
方法 函数
- (void)test; void test();
方法是以减号 - 开头 -
类型要用()括起来 -
声明必须写在@interface-@end之间,实现必须写在@implementation-@end之间 可以写在文件中的任意位置
只能由对象来调用 -
可以直接访问成员变量 不可以直接访问成员变量

Objective-C成员方法与类方法的区别

  • 成员方法是以减号 “-” 开头
  • 类方法是以加号 “+” 开头
成员方法 类方法
- (void)test; + (void)test;
  • 成员方法必须使用对象调用
  • 类方法可以直接使用类名调用

总结

  • OC成员方法就好比Java里的非静态方法,需要使用对象调用
  • OC类方法就好比Java里的静态方法(static),可以使用类名直接调用
  • 一般工具类使用类方法比较多

带有返回值的方法

Objective-C

  • 声明

    @interface NumUtil : NSObject
    - (double)pi;
    @end
  • 实现

    @implementation NumUtil
    - (double)pi
    {
    return 3.14;
    }
    @end
  • 调用

    NumUtil *n = [NumUtil new];
    NSLog(@"%f",[n pi]);

Java

  • Java类

    大概是这样

    public class NumUtil{
    public double pi(){
    return 3.14;
    }
    }
  • 调用

    NumUtil numUtil = new NumUtil;
    numUtil.pi();

带有一个参数的方法

Objective-C

  • 声明

    @interface NumUtil : NSObject
    - (int)square:(int)num;
    @end
  • 实现

    @implementation NumUtil
    - (int)square:(int)num;
    {
    return num * num;
    }
    @end
  • 调用

    NumUtil *n = [NumUtil new];
    NSLog(@"%d",[n square:2]);

Java

  • Java类

    大概是这样

    public class NumUtil{
    public int square(int num){
    return num * num;
    }
    }
  • 调用

    NumUtil numUtil = new NumUtil;
    numUtil.square(2);

带有多个参数的方法

Objective-C

  • 声明

    @interface NumUtil : NSObject
    - (int)addNum1:(int)num1 addNum2:(int)num2;
    @end
  • 实现

    @implementation NumUtil
    - (int)addNum1:(int)num1 addNum2:(int)num2
    {
    return num1 + num2;
    }
    @end
  • 调用

    NumUtil *n = [NumUtil new];
    NSLog(@"%d",[n addNum1:1 addNum2:2]);

Java

  • Java类

    大概是这样

    public class NumUtil{
    public int add(int num1, int num2){
    return num1 + num2;
    }
    }
  • 调用

    NumUtil numUtil = new NumUtil;
    numUtil. add(1, 2);

注意

Objective-C方法名的问题

OC的方法名,和Java有些不同,Java很好理解

OC也不难理解,只是习惯了Java的那种命名方式,看到OC有点不适应

举个例子:

  • - (double)pi;

    这个很好理解,方法名就是 pi

  • - (int)square:(int)num;

    带参数的方法名有点特殊了

    首先说冒号“:”,冒号后面的一定是参数

    可以理解成,有几个冒号,就有几个参数

    空格后面参数前面的内容拼起来(不算类型),就是方法名

    那么,这个方法的方法名就是square:,(注意:是有冒号的)

  • - (int)addNum1:(int)num1 addNum2:(int)num2;

    根据上面的方法

    这个方法的方法名就是 addNum1:addNum2:

    其实很好理解,就是把每个参数的描述加上冒号拼接到一块,组成方法名,方便阅读

XCode查看方法名也很方便

Objective-C方法与函数的区别的更多相关文章

  1. python 全栈开发,Day113(方法和函数的区别,yield,反射)

    一.方法和函数的区别 面向对象 初级 class StarkConfig(object): def __init__(self,model_class): self.model_class = mod ...

  2. Scala方法定义,方法和函数的区别,将方法转换成函数

    1. 定义方法和函数 1.1. 定义方法 方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型 1.2. 定义函数 1.3.方法和函数的区别 在函数式编程语言中,函数是 ...

  3. python中方法与函数的区别与联系

    今天huskiesir在对列表进行操作的时候,用到了sorted()函数,偶然情况下在菜鸟教程上看到了内置方法sort,同样都可以实现我对列表的排序操作,那么方法和函数有什么区别和联系呢? 如下是我个 ...

  4. OC-常见错误 方法与函数的区别

    对象方法: 1,减号 - 2,声明必须写在@interface和@end之间   实现必须写在@implement 和@end之间 3,对象方法只能由对象来调用 4,对象方法归类.对象所有 函数: 函 ...

  5. golang方法和函数的区别

  6. Scala 方法和函数

    package com.bigdata // /** Scala 方法和函数:Scala中既有函数也有方法,大多数情况下我们都可以不去理会他们之间的区别. * * 方法:Scala 中的方法跟 Jav ...

  7. Scala学习笔记(三)—— 方法和函数

    1. 方法 方法使用 def 定义: def 方法名(参数名:参数列表,…) :返回值类型 = { 方法结构体 } scala> def add(x : Int ,y : Int):Int = ...

  8. 第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数

    4.    Scala基础 4.1.   声明变量 package cn.itcast.scala object VariableDemo {   def main(args: Array[Strin ...

  9. 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖

    今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...

随机推荐

  1. Java程序优化之替换swtich

    关键字switch语句用于多条件判断,功能类似于if-else语句,两者性能也差不多,不能说switch会降低系统性能.在绝大部门情况下,switch语句还是有性能提升空间的. 但是在项目代码中,如果 ...

  2. JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域

    JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行)   JS的作用:表单验证,减轻服务端的压力 添加页面动画效果  动态更改页面内容  Ajax网络请求 (一)常见的对 ...

  3. 页面中引入mui 地址选择,点击页面中其他input时页面回到顶部

    问题:在页面中引入mui地址选择时,点击页面中的input页面会滚到顶部(谷歌浏览器中出现的bug),在手机上点击input会出现跳动.开始的时候是想修改mui.min.js里的滚动事件,但是后来找到 ...

  4. [ZJOI2008]瞭望塔

    题目描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安. 我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, y1), ...

  5. ●CodeForces 549F Yura and Developers

    题链: http://codeforces.com/problemset/problem/549/F题解: 分治,链表. 考虑对于一个区间[L,R],其最大值在p位置, 那么答案的贡献就可以分为3部分 ...

  6. ●BZOJ 4541 [Hnoi2016]矿区

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4541 题解: 平面图的对偶图,dfs树 平面图的对偶图的求法: 把所有双向边拆为两条互为反向 ...

  7. 基于vfs实现自己的文件系统

    1.Linux 文件系统组成结构 linux文件系统有两个重要的特点:一个是文件系统抽象出了一个通用文件表示层--虚拟文件系统或称做VFS.另外一个重要特点就是它的文件系统支持动态安装(或说挂载等), ...

  8. [WC2008]游览计划

    [题目描述] 从未来过绍兴的小 D 有幸参加了Winter Camp 2008,他被这座历史名城的秀丽风景所吸引,强烈要求游览绍兴及其周边的所有景点. 主办者将绍兴划分为 N 行M 列(N×M)个方块 ...

  9. [HNOI2006]超级英雄

    题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才 ...

  10. bzoj2442[Usaco2011 Open]修剪草坪 单调队列优化dp

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1159  Solved: 593[Submit] ...