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變量的作用域被限制在單一的文件中。代碼可以如下所示:

 

 

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

 

[cpp]  view plain  copy
  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;  各位朋友們注意一下這法方法前面的+號。 它的意思是標致這個方法為靜態方法,標志+號后不用創建這個對象通過類名可以直接調用這個靜態方法。 而之前方法前用過的-號,標志-號后的方法必須通過本類的對象或者在本來中才可以使用。

 

[cpp]  view plain  copy
  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM