zoukankan      html  css  js  c++  java
  • oc08--局部变量,全局变量,函数方法的区别

    //
    //  main.m
    //  局部变量和全局变量以及成员变量的区别
    
    #import <Foundation/Foundation.h>
    @interface Person : NSObject
    {
        // 写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量)
        // 成员变量只能通过对象来访问
        // 注意: 成员变量不能离开类, 离开类之后就不是成员变量,成员变量不能在定义的同时进行初始化。
        // 存储: 堆(当前对象对应的堆的存储空间中)
        // 存储在堆中的数据, 不会被自动释放, 只能程序员手动释放
        int age;
    }
    @end
    @implementation Person
    @end
    // 写在函数和大括号外部的变量, 我们称之为全局变量
    // 作用域: 从定义的那一行开始, 一直到文件末尾
    // 局部变量可以先定义在初始化, 也可以定义的同时初始化
    // 存储: 静态区
    // 程序一启动就会分配存储空间, 直到程序结束才会释放
    int a;
    int b = 10;
    
    int main(int argc, const char * argv[]) {
        // 写在函数或者代码块中的变量, 我们称之为局部变量
        // 作用域: 从定义的那一行开始, 一直到遇到大括号或者return
        // 局部变量可以先定义再初始化, 也可以定义的同时初始化
        // 存储 : 栈
        // 存储在栈中的数据有一个特点, 离开作用域,系统会自动给我们释放
        int num = 10;
        {
            int value;
        }
        return 0;
    }
    //
    //  main.m
    //  函数和方法的去呗
    
    #import <Foundation/Foundation.h>
    /*
     函数和方法的区别
     1.函数属于整个文件, 方法属于某一个类,函数可以直接调用, 方法必须用对象或者类来调用
     注意: 虽然函数属于整个文件(可以写在类的实现中), 但是如果把函数写在类的声明中会不识别。
     3.不能把函数当做方法来调用, 也不能把方法当做函数来调用
     
     方法的注意点:
     >方法可以没有声明只有实现。
     >方法可以只有声明没有实现, 编译不会报错, 但是运行会报错
     如果方法只有声明没有实现, 那么运行时会报: 
     reason: '+[Person demo]: unrecognized selector sent to class 0x100001140'
     发送了一个不能识别的消息, 在Person类中没有+开头的demo方法
     reason: '-[Person test]: unrecognized selector sent to instance 0x100400000'
     
     
     类也有一个注意点:
     类可以只有实现没有声明,实现中加上 : NSObject,,
     注意: 在开发中不建议这样写
     
     */
    
    //@interface Person : NSObject
    //// 对象方法声明
    //- (void)test;
    //// 类方法声明
    //+ (void)demo;
    //
    //@end
    
    @implementation Person : NSObject  //不申明就要加上 : 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;
    }
    //
    //  main.m
    //  常见错误
    
    #import <Foundation/Foundation.h>
    @interface Person : NSObject
    {
        int _age;
    }
    - (void)test;
    @end
    @implementation Person
    - (void)test
    {
        NSLog(@"test");
    }
    @end
    
    int main(int argc, const char * argv[]) {
        
        Person *p = [Person new];
        [p test];
        /*
         //    1.只有类的声明,没有类的实现
         //    2.漏了@end
         //    3. @interface和@implementation嵌套
         //    4.成员变量没有写在括号里面
         //    5.方法的声明写在了大括号里面
         //    6.成员变量不能在{}中进行初始化、不能被直接拿出去访问
         //    7.方法不能当做函数一样调用
         //    8.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
         //    9.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
         //    10.C函数不能访问OC对象的成员
         //    11.低级错误:方法有声明,但是实现的时候写成了函数
         //    12.OC可以没有@interface同样可以定义一个类
         //    13.static不能用在成员变量和方法上。
         */
        
        return 0;
    }
  • 相关阅读:
    [Silverlight]App.Current Events中的Startup,UnhandledException以及Exit事件
    [Silverlight]使用DoubleAnimation为对象添加动画效果
    [翻译]ASP.NET MVC Tip #39 – 在ASP.NET MVC中使用分布式缓存
    [翻译]ASP.NET MVC CodePlex Preview 5 更新细节(未完成)
    [Silverlight]打造具有放大缩小效果的图片导航
    [Silverlight]Silverlight2中打造SplashScreen 1
    [Silverlight]如何创建超链接
    [Silverlight]TextBlock控件全攻略
    [转]ajax框架比较
    MonoRail学习之源码放送
  • 原文地址:https://www.cnblogs.com/yaowen/p/7411184.html
Copyright © 2011-2022 走看看