2014-09-30 3 views
0

이 같은 뭔가가 필요iOS. 여러 클래스에서 같은 이름의 다른 정적 변수가 있습니까?</p> <p>.H 파일 :

@interface A : UIViewController 
- (void)setCount:(int)c; 
- (int)getCount; 
@end 

@interface B : A 
@end 

@interface C : A 
@end 

하는 .m 파일을

@implementation A 
- (void)setCount:(int)c {...} 
- (int)getCount {...} 
@end 

@implementation B 
static int count = -1; 
@end 

@implementation C 
static int count = -1; 
@end 

그러나 getCountsetCount:는 B 클래스에서 구현되지 않은 상태에서이 코드는 작동하지 않을 것이다 C. 문제 :

  • 이 두 메서드를 각 클래스에서 구현하는 것은 내 응용 프로그램에 많은 클래스가 있기 때문에별로 적합하지 않습니다. 이 각각의 서브 클래스

  • 내가 ALLOC 전에 값을 저장해야하기 때문에 변수가 정적이어야한다에 대해 동일하기 때문에

  • 내가 클래스 A의 내부 정적 변수를 선언 할 수 없습니다/할당 해제는

  • 를 호출

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+0

gnasher는 사실을 설명했지만 일반적으로 정적 변수는 사용하지 않는 것이 좋습니다. 진정으로 게임 프로그램에서 "글로벌"이 필요하다면, 싱글 톤을 사용하는 법을 배우십시오. – Fattie

+0

코드에서 정확히 작동하지 않는 것은 무엇입니까? 'static int count = -1;'이것은? – kelin

답변

0

각 소스 파일 또는 각 범위 내에서 주어진 이름의 정적 개체 하나를 사용할 수 있습니다. @ 구현은 중요하지 않습니다. 그래서 코드가 하나의 소스 파일에 있다면 그것은 불법입니다. @implementations이 두 개의 서로 다른 소스 파일에 있으면 괜찮습니다. 정적 변수가 다른 범위에 있다면 괜찮습니다. 예를 들어

- (NSInteger)countBools:(BOOL)aBool 
{ 
    if (aBool) 
    { 
     static NSInteger count; 
     return ++count; 
    } 
    else 
    { 
     static NSInteger count; 
     return ++count; 
    } 
} 

하나 개는 YES로 메서드를 호출 할 때마다 증가 카운터, 당신은 NO와 메서드를 호출 할 때마다 증가 또 다른 카운터를 반환 잘 작동합니다.

0

감사합니다. 더 나은 솔루션을 찾아 주셔서 감사합니다. 각 클래스 내에 정적 변수를 선언하는 것을 피할 수는 없지만이 프로세스를 훨씬 더 간단하게 만들 수 있습니다.

A.h 안에 정적 변수 선언이있는 #define을 선언하고 각 서브 클래스에서 한 줄만 사용하십시오. 그다지 아름답지는 않지만이 변수와 연결된 모든 메서드를 간단한 방법으로 선언 할 수 있습니다.