2013-07-01 4 views
0

저는 Objective-C 초보자이며 전역 변수를 사용하려고합니다. 나는이 질문에 100 번이나 물었다는 것을 압니다. 그러나 그 답 중 아무 것도 나를 위해 일하지 못했습니다. 한 클래스에서 BOOL 변수를 선언하고 다른 변수에서 값을 확인하려고합니다. SController.h : 이것은 내가 함께 일하고 있어요 무엇전역 변수를 정확히 사용하려면 어떻게해야합니까?

@interface SController : UIViewController { 
    BOOL leftSide; 
    BOOL rightSide; 

} 

SController.m :

- (void)viewDidLoad { 
leftSide = YES; 
rightSide = YES; 
} 

지금, 나는에 BOOLs의 값에 액세스하는 데 노력하고있어 클래스 :

#import "SController.h" 
@interface VViewController : UIViewController 
{ 
} 

그리고 VViewController의하는 .m :

- (void)viewDidLoad { 
// See what the BOOL values from SController are. 
} 

내가 시도한 것 : SController.h의 BOOLs 선언 앞에 "extern"을 넣으려고했으나 작동하지 않았습니다. 나는 단순히 SControllers 헤더 파일을 VViewController로 가져와 보았습니다. 그리고 그 중 하나는 작동하지 않았습니다. 나는 Objective-C와 프로그래밍에 익숙하지 않기 때문에 이런 기본적인 개념을 고수하는 데 어려움을 겪고 있습니다. 나는 전역 변수를 사용하여 주변의 잠재적 인 문제를 이해하지만이 프로그램은 매우 작고 개인적인 용도로 사용됩니다. 누군가가 이런 일이 일어나기 위해 무엇을 바꿀지를 보여줄 수 있다면 그것은 좋을 것입니다.

+0

이 전역 변수 만, 인스턴스 변수 수 없습니다. 전역 변수를 선언하려면 클래스 선언 외부의 헤더 또는 구현 파일에 선언하십시오. –

+0

@RamyAlZuhouri 오, 고마워. 왜 그 대답이 나에게 도움이되지 못했는지 설명해 줄거야. 나는 그에게 총을 줄 것이다. – John

+0

SController에서 두 개의 속성을 정의해야합니다. VViewController에서는 delegate.leftSide 및 delegate.rightSide와 같은 확인합니다. delegate는 SController의 객체입니다. – stosha

답변

1

다른 말처럼, 그 (그리고 다른 대부분의) 목적을 위해 전역 변수를 사용하지 마십시오.

iVars를 만들었고 액세스하려면 다른 개체에 노출해야합니다. 일반적으로 사용자의 SController 헤더 파일에 @properties를 정의하면됩니다. 그렇게하면 iVars를 직접 만들 필요가 없으며 암시 적으로 만들어집니다. 또한 iVars에 액세스하는 메소드도 자동으로 생성됩니다 (getter 및 setter). 에 "대화"에 (당신이 이것을 이해 중요하다 당신이 이전에 만든 SController의 인스턴스에 대한 참조를 필요로하고 원하는 다른의 ViewController에서

@interface SController: UIViewController 
//no need to declare the iVars here, they are created by the @property definitions 

@property (nonatomic, assign) BOOL leftSide; 
@property (nonatomic, assign) BOOL rightSide; 

@end 

:

귀하의 SControllers 헤더는 다음과 같이 볼 수 있었다), 당신은 그래서 같이 생성 된 게터/세터 방법을 통해 인스턴스 변수에 액세스 할 수 있습니다 : 목표 - C 속성의 getter/setter를 그리고 점 표기법 :

//this is "dot notation", the first line would be equivalent 
//to writing: [sControllerInstance setLeftSide: YES] 
sControllerInstance.leftSide = YES; 
BOOL valueRightSide = sControllerInstance.rightSide; 

는 위로 읽어 보시기 바랍니다. 구현의 GlobalVariable.m 파일에 다음

extern NSString * googleURL; 

을 다음과 같이 당신이 구글에서 많은 정보를 찾을 수 및 SO

+0

굉장 고마워 마리오, 그게 매우 도움이되었다! – John

0

나는 이것이 당신이 찾고있는 해답이 아니라는 것을 알고 있지만, 앱을 다시 생각해보십시오. 전역 변수는 객체 지향 프로그래밍을위한 최선의 방법이 아닙니다.

0

는 GlobalVariable.h 헤더 클래스 파일을 생성하고 다음 externs을 정의

#import "GlobalVariable.h" 

NSString * googleURL = @"www.google.co.uk"; 

그리고 그것을 사용하고자하는 곳 어디서나 클래스를 임포트하십시오.

0

기본적으로 변수는 (코드에 정의 된대로) 보호됩니다. @ public 키워드를 2 개의 변수 앞에 추가하여 공개 할 수는 있지만 권장하지는 않습니다. 일반적으로 당신은 @property 키워드를

예를 사용하여 속성으로 사람들을 노출 할 :

@interface SController : UIViewController { 

    @public 
    BOOL leftSide; 
    BOOL rightSide; 

    @protected 
    //other protected variables here 
} 
관련 문제