zoukankan      html  css  js  c++  java
  • 转载 IOS开发之---static变量

    Objective-C 支持全局变量

    主要有两种实现方式:

    (1)第一种和C/C++中的一样, 使用"extern"关键词;

    (2)另外一种就是使用单例实现。 

    (比如我们经常会把一个变量放在AppDelegate里面作为全局变量来访问, 其中AppDelegate就是一个单例类) 


    在Objective-C中如何实现像C++中那样的静态成员变量呢?
    你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class method,也就是类方法)来操作该变量。

    这样在其它类中你就不需要创建A类的实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量,但是也算达到了同样的效果。static变量的作用域被限制在单一的文件中。代码可以如下所示:


    1. //example.h      
    2. @interface Example : NSObject {     
    3.      
    4. }   
    5. - (id)init;      
    6. +(int)instanceCount;          
    7. @end    

    1. //example.m      
    2.  #import "example.h"           
    3. static int count;          
    4. @implementation Example      
    5. -(id)init{      
    6.     self = [super init];      
    7.     if(nil!=self){      
    8.         count+=1;      
    9.     }      
    10.  return self;      
    11. }          
    12. +(int)instanceCount{      
    13.      return count;     
    14. }          
    15. @end    


    上面的例子中你就可以通过[Example instanceCount]对静态变量count进行访问,无须创建实例。


    MyClass.h
    警告:  static 写在interface外面编译是没有错误的,但是编译器会报警告,这么说这样的写法是不被编辑器认可的。
    错误:static 写在interface里面会直接报错,显然这样的语法是不被认可的。



    +(void) addCount;  各位朋友们注意一下这法方法前面的+号。 它的意思是标致这个方法为静态方法,标志+号后不用创建这个对象通过类名可以直接调用这个静态方法。 而之前方法前用过的-号,标志-号后的方法必须通过本类的对象或者在本来中才可以使用。

    1. #import <Foundation/Foundation.h>  
    2. //警告  
    3. //static int sCount ;   
    4.  @interface MyClass : NSObject  
    5. //static int sCount;  
    6. }    
    7. +(void) addCount;    
    8. @end    

    MyClass.m


           static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,
    它只在程序开机初始化一次。
    +(void)addCount 因为标识了+号,所以这个方法无需使用这个类的对象调用。
    直接使用类名方可调用这个方法。


    #import "MyClass.h"
    static int sCount  = 100;
    @implementation MyClass 
    +(void)addCount   

         sCount ++;  
         NSLog(@"静态整型变量的值为:%d", sCount);

    @end   

    http://www.cocoachina.com/bbs/simple/?t60419.html

  • 相关阅读:
    简单说说Restful API
    事务的ACID特性
    WPF DataGrid与ListView性能对比与场景选择
    WPF MVVM实现INotifyPropertyChanged数据监听
    学习Promise异步编程
    CSS单位
    Mac Docker设置国内镜像加速器
    Mac下安装Redis,附可视化工具Medis
    预告 | XPocket开源产品发布会将于1月15日正式线上直播!
    CSDN资源免费下载
  • 原文地址:https://www.cnblogs.com/codeforcode/p/3768896.html
Copyright © 2011-2022 走看看