2010-07-07 250 views
37

我想澄清是否發生的內部方法,或者如果每個實例都有它自己的拷貝靜態變量的Objective-C類份額不同的實例:靜態變量

- (void) myMethod { 
    static int myVar = 0; 
} 

回答

30

這是相同的作爲C中的靜態變量;實例將共享該變量。如果您希望每個實例都有自己的副本,則需要一個實例變量(在@interface塊中聲明)。

+3

你不能說「跟C一樣」。 「主觀」C在客觀意義上沒有實例。 – iter 2010-07-07 21:59:20

+6

@iter,它與C中的任何靜態變量相同,都是我的意思。如果它是一個靜態的全局變量,那麼每個編譯單元只有一個,如果它是一個靜態局部變量,則每個函數(或Objective-C中的方法)都會引用它。 – 2010-07-07 22:12:16

78

靜態本地是在方法調用和實例之間共享的。 你可以把它們作爲全局只內他們的方法是可見的:

- (void) showVars { 
    int i = 0; 
    static int j = 0; 
    i++; j++; 
    NSLog(@"i = %i ; j = %i", i, j); 
} 

[...]

[obj1 showVars]; 
[obj2 showVars]; 
[obj1 showVars]; 
[obj2 showVars]; 

2種不同的情況下,上面的調用將輸出:

i = 1 ; j = 1 
i = 1 ; j = 2 
i = 1 ; j = 3 
i = 1 ; j = 4 
+0

針對特定於實例的靜態局部變量的任何解決方案? – fatuhoku 2015-03-03 12:21:17

+1

@fatuhoku這甚至意味着什麼?如果它們是特定於實例的,它們如何是靜態的? – lensovet 2015-09-28 12:20:47