第01天OC语言(13):方法和函数的区别

一、概念

/*
 函数 和 方法的 区别
  1.函数属于整个文件, 方法属于某一个类
    方法如果离开类 就不行
  2.函数可以直接调用
 注意 :  虽然函数属于整个文件,但是如果把函数 写在 类的声明中 会不识别
 方法的注意点 : 
    方法可以没有声明 只有实现
    方法可以只有声明没有实现,编译不会报错,但是运行会报错
     如果方法 只有声明 没有实现, 那么运行时会报错 :  reason: '+[Person demo]: unrecognized selector sent to class 0x100001140' ---class
    发送了一个不能识别的消息, 在Person类中 没有+开头的 demo方法
 reason: '-[Person test]: unrecognized selector sent to instance 0x100103560' ---instance
 
 类也有一个注意点 : 
 类 可以只有实现 没有声明
 注意 : 在开发中 不建议这样写
 */
二、代码
#import 
#pragma mark 类

//@interface Person : NSObject
//// 对象方法声明
//- (void)test;
//// 类方法声明
////+ (void)demo;
//
//
///*
//// 外部函数声明
//extern void sum();
//// 内部函数声明
//static void minus();
//// 外部函数
//extern void sum()
//{
//    printf("sum");
//}
//// 内部函数
//static void minus()
//{
//    printf("minus");
//}
// */
//
//@end

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

@end

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

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


    return 0;
}
第01天OC语言(13):方法和函数的区别_第1张图片
image.png
第01天OC语言(13):方法和函数的区别_第2张图片
image.png
第01天OC语言(13):方法和函数的区别_第3张图片
image.png
第01天OC语言(13):方法和函数的区别_第4张图片
image.png
第01天OC语言(13):方法和函数的区别_第5张图片
image.png
image.png

你可能感兴趣的:(第01天OC语言(13):方法和函数的区别)