函数与方法对比

  • 对象方法:

    • (1)对象方法的实现只能写在@[email protected]中,对象方法的声明只能写在 @[email protected]中间
    • (2)对象方法都以-号开头,类方法都以+号开头
    • (3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用
    • (4)函数属于整个文件,可以写在文件中的任何位置,包括@[email protected]中,但写在 @[email protected]会无法识别,函数的声明可以在main函数内部也可以在main函数外部。
    • (5)对象方法归类\对象所有
  • 函数:

    • (1)所有的函数都是平行的
    • (2)函数不存在隶属关系
    • (3)使用的时候可以直接调用
    • (4)不可以访问对象中的成员变量
#import <Foundation/Foundation.h>
/*
 函数和方法的区别
 1.函数属于整个文件, 方法属于某一个类
 方法如果离开类就不行
 2.函数可以直接调用, 方法必须用对象或者类来调用
 注意: 虽然函数属于整个文件, 但是如果把函数写在类的声明中会不识别
 3.不能把函数当做方法来调用, 也不能把方法当做函数来调用

 方法的注意点:
 >方法可以没有声明只有实现
 >方法可以只有声明没有实现, 编译不会报错, 但是运行会报错
 如果方法只有声明没有实现, 那么运行时会报:
 reason: ‘+[Person demo]: unrecognized selector sent to class 0x100001140‘
 发送了一个不能识别的消息, 在Person类中没有+开头的demo方法
 reason: ‘-[Person test]: unrecognized selector sent to instance 0x100400000‘

 类也有一个注意点:
 类可以只有实现没有声明
 注意: 在开发中不建议这样写

 */

//@interface Person : NSObject
//// 对象方法声明
//- (void)test;
//// 类方法声明
//+ (void)demo;
//
//@end

@implementation Person : NSObject
// 对象方法实现
- (void)test
{
    NSLog(@"test");
}
// 类方法实现
+ (void)demo
{
    NSLog(@"demo");
}

@end

// 外部函数的声明
extern void sum();
// 内部函数的声明
static void minus();
// 外部函数
extern void sum()
{
    printf("sum");
}
// 内部函数
static void minus()
{
    printf("minus");
}

int main(int argc, const char * argv[]) {
    sum();
//    [Person demo];
//    demo();
//    [Person sum];
//    [Person demo];
    Person *p = [Person new];
    [p test];

    return 0;
}
时间: 2024-10-07 05:40:46

函数与方法对比的相关文章

JavaScript数组方法对比(深度学习数组)

JavaScript数组方法对比 众所周知,JavaScript提供了许多对数组进行改变的方法,但是有些会对原数组进行影响,有些不会.下边就列举出来. 一.新增 影响原数组 array.push()  //向数组的末尾添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]; array.push(6); // [1,2,3,4,5,6]; array.unshift() //向数组的开头添加一个或更多元素,并返回新的长度. var array =[1,2,3,4,5]

数组遍历方法对比

数组遍历方法对比 forEach函数 函数说明: forEach(f [,o]): 此方法类似于for/in循环,其作用是遍历整个数组并执行函数的某些操作,但它不会遍历数组的属性.它接受一个函数参数,该函数可以有1.2与3个参数.完整的三个参数分别为:数组中的每一个值,数组的索引,数组本身.这个函数没有返回值. 获取数组方法: function getArray(){ var a = new Array(10); for(var i=0, j=a.length; j>i; i++) a[i] =

学习笔记:jquery1.9版本后废弃的函数和方法

jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题 (转载自:http://www.ppblog.cn/jquery1-9live.html  版权归原作者所有) jQuery1.9中改变的地方 Jquery1.9中改变了很多东西,具体的升级可以参考一下官方的升级指南. .toggle(function, function, … ) 方法删除 这个方法绑定两个或多个处理程序到匹配的元素,用来执行交替的点击事件.它不应该被混同于显示或隐藏匹配元素.toggle( )方法,因为它

vue 和 react 组件间通信方法对比

vue 和 react 组件间通信方法对比 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).this.$refs.this.$children props 子组件 => 父组件 自定义事件($emit.$on)(推荐).this.$parent 回调函数(推荐) 非父子组件(兄弟组件.跨级组件) bus 高阶组件(推荐).自定义事件.context 原文地址:https://www.cnblogs.com/cag2050/p/9054840.html

react系列-事件绑定的几种方法对比

前言 本文主要给大家介绍了关于React事件绑定的几种方法对比的相关呢荣,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. React事件绑定 由于类的方法默认不会绑定this,因此在调用的时候如果忘记绑定,this的值将会是undefined. 通常如果不是直接调用,应该为方法绑定this.绑定方式有以下几种: 1. 在构造函数中使用bind绑定this ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Button extends

unity中三种调用其他脚本函数的方法

第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用-- 第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名");  此种方法可以调用public和private类型函数 第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型函数 unity中三种调用其他脚本函数的

matlab中同一文件定义子函数的方法

在matlab中一个.m文件中可以有多个的子函数,但仅能有一个主函数,并且M文件名必须和主函数相同在一个m文件中通常有两种定义子函数的方法: 1.嵌套定义 myfunc1会和主函数共享变量名.这种情况下,使用相同的变量名,如果不是故意为之,就不合适了.function mainFunc(... a = myfunc1();...function myfunc1()...end end2. 非嵌套定义function mainFunc()...a = myfunc1();...end functi

boost在lambda表达式中调用占位符参数的成员函数的方法

boost中提供了lambda表达式的用法,但是lambda表达式的功能还不是很强大,在其中只能对lambda的占位符参数_1等使用最基本的操作符,如+-*/,可是很多时候如果传入的占位符参数是一个对象指针的话,我们可能想要调用这个类的成员函数. 我在开发中遇到了这个问题,需要在stl的算法中传入一个函数来调用对象的比较函数,因为感觉这样太麻烦,还需要重新定义一个函数,所以想起了lambda表达式,c++11的lambda表达式我倒是没试过,可是受项目开发环境所限,只能选择boost.但是我用的

李洪强iOS开发之OC[017]函数和方法的区别

// //  main.m //  15 - 函数和对象的方法的区别 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. All rights reserved. // 函数和对象方法的区别 对象方法: - (void)run; #import <Foundation/Foundation.h> @interface Person : NSObject{ @public //定义实例变量 NSString *_nam