• Objective


    前面我们简单的介绍了方法和函数的混编, 这次我们来讲解一些注意事项:


    首先我们来看一个例子:

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    {
        int age;
    }
    
    - (void)walk;
    
    @end
    
    @implementation Proson
    - (void)walk
    {
        NSLog(@"人在走路");
    }
    @end
    
    int main()
    {
        Proson *p = [Proson new];
        
        [p walk];
        
        return 0;
    }



    我们都知道这是规范的写法, 但有一些没有经验的人或许会犯以下的错误:

    1. @end配套错误

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    
    @implementation Proson
    
    @end
    
    @end
    
    int main()
    {
        return 0;
    }

    我们都知道代码是从上往下执行的, 那么从@interface开始, 找到第一个@end就结束了, 而@implementation在它们之间, 也会被结束掉, 但是它没有找到对应的@end, 所以编译器会报错.


    2.方法声明和方法实现位置调换

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    - (void)test
    {
        
    }
    @end
    
    @implementation Proson
    
    - (void) test;
    
    @end
    
    int main()
    {
        return 0;
    }

    这里要特别强调一样@interface里是用来声明方法和成员变量的, 不是用来实现方法的, 所以一定要切记不要反过来了.



    3.在声明成员变量的时候赋值

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    {
        int age = 20;
    }
    @end
    
    @implementation Proson
    
    @end
    
    int main()
    {
        return 0;
    }

    在OC中, 不能直接在@interface赋值, 与C语言不一样, 在OC中赋值需要有一个对象才可以给间接给成员变量赋值, 否则就会报错.



    4.不能在@interface里使用static

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    {
        static int age;
    }
    @end
    
    @implementation Proson
    
    @end
    
    int main()
    {
        return 0;
    }

    在OC中虽然是可以使用static这个关键字, 但不能在@interface里面使用.



    5.错误声明/实现方法

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    
    (void)tset;
    @end
    
    @implementation Proson
    (void)test
    {
        
    }
    @end
    
    int main()
    {
        
        return 0;
    }

    在OC中, 如果要声明/实现方法, 必须得在方法名前加上" - "符号, 否则编译器会报错.




    补充一些知识:

    1.函数可以在文件任何地方定义(main()函数之后除外)

    #import <Foundation/Foundation.h>
    
    void test()
    {
        
    }
    
    @interface Proson : NSObject
    
    void test2()
    {
        
    }
    
    @end
    
    void test3()
    {
        
    }
    
    @implementation Proson
    
    void test4()
    {
        
    }
    
    @end
    
    int main()
    {
    
        return 0;
    }
    

    这样子编译是没有问题的~~


    2.一个文件里面可以又多个@interface @end和多个@implementation @end

    #import <Foundation/Foundation.h>
    
    @interface Proson : NSObject
    
    @end
    
    @implementation Proson
    
    @end
    
    
    
    @interface Car : NSObject
    
    @end
    
    @implementation Car
    
    @end
    
    int main()
    {
    
        return 0;
    }
    


    这样子写也是没有问题, 但是类名不能相同.



    下面来总结一下:

     方法

     1.对象方法都是以减号

     2.对象方法的声明必须写在@interface@end之间, 对象方法的实现必须写在@implementation@end之间

     3.对象方法只能由对象来调用

     4.对象方法归类对象所有

     

     函数

     1.函数能写在文件中的任意位置(main()函数之后除外),函数归文件所有

     2.函数调用不依赖于对象

     3.函数内部不能直接通过成员变量名访问某个对象的成员变量




    好了, 这次我们就讲到这里, 下次我们继续~~

  • 相关阅读:
    MPLS 知识要点1
    ISIS的SSN和SRM标志
    对比ISIS和OSPF
    ISIS帧中继实验
    ISIS 认证实验
    ISIS数据库同步
    ISIS Lab 路由泄露
    ISIS Lab 重分布直连
    32、端口有效范围是多少到多少?
    33、为何需要把 TCP/IP 协议栈分成 5 层(或7层)?开放式回答。
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282861.html
Copyright © 2020-2023  润新知