main.m
파일에 변수를 선언하여 모든 클래스에서 사용할 수 있도록하려면 어떻게해야합니까?objective-c - 전역 변수
단순히 main
함수에서 선언하면 컴파일러에서 클래스 메서드에서 선언하지 않는다고 말합니다.
나는 이것을 다음과 같이 선언해야합니까?
@public
type variable;
main.m
파일에 변수를 선언하여 모든 클래스에서 사용할 수 있도록하려면 어떻게해야합니까?objective-c - 전역 변수
단순히 main
함수에서 선언하면 컴파일러에서 클래스 메서드에서 선언하지 않는다고 말합니다.
나는 이것을 다음과 같이 선언해야합니까?
@public
type variable;
일반적인 오래된 전역 변수를 사용하면됩니다.
먼저 main
기능을하기 전에, 당신의 main.m
에 변수를 정의 :
#import <...>
// Your global variable definition.
type variable;
int main() {
...
둘째, 다른 소스 파일이 그것에 대해 알 수 있도록해야합니다. 그렇지 않으면 그 정의되고, 당신이 선언 블록의 변수에 값을 할당 할 수 없습니다
// .h file
// Declaration of your variable.
extern type variable;
주 : 당신은 당신이 당신의 변수를 필요 .m
파일을 일부 .h
파일을 선언하고 모두 해당 파일을 가져와야합니다 변수와 동일한 이름의 여러 정의에 대해 불평하는 링커 오류로 끝납니다. 각 변수는 가 (선언이 변수가 어딘가에 존재한다는 것을 말한다) 여러 번 선언 할 수 있지만, 는 (정의는 실제로 변수에 대한 메모리를 생성) 한 번만 정의 :
그러나 전역 변수는 파일에서 예기치 않게 변경 될 수 있으므로 오류를 디버깅하는 데 어려움이있을 수 있으므로 잘못된 코딩 방법입니다. 예를 들어, Singleton 패턴을 사용하여 전역 변수를 피할 수 있습니다.
왜 그렇게하고 싶은지 잘 모르겠지만 원하는 경우 할 수 있습니다.
main.m :
int someGlobal = 0; ///< Added outside any function, at the top say.
SomeClass.m :
extern int someGlobal; ///< Added at the top, outside the class implementation.
...
- (void)useGlobal {
NSLog(@"someGlobal = %i", someGlobal);
someGlobal = 5;
NSLog(@"someGlobal = %i", someGlobal);
}
그러나,이 같은 것을 사용에 착수하기 전에 신중하게 생각하시기 바랍니다!
조심해야하는 이유는 무엇입니까? 위험 요소가 무엇인지 이해할 수 없습니다. – Sirens
위험 요소는 유지 관리 할 수없는 코드이거나 버그 추적이 어려울 수 있습니다. – mattjgalloway
인터넷에서 글로벌 바 (vars)에 관한 모든 게시물에는 "주의하십시오"라는 경고와 "조심해야하는 이유"라는 경고가 있습니다. 하하, 항상 같은 재즈입니다. 조심하고 싶지 않은 사람들 : 다른 사람들이 반복해서 경고하는 이유에 대해 숨겨진 이유가 있다고 생각하십시오.) – tothemario
디버깅 외에도 main.m 파일을 직접 수정하여 응용 프로그램 로직과 상호 작용할 이유가 없습니다.
필요에 따라 Your_project_name_Prefix.pch 파일에서 상수를 정의 할 수 있습니다. 또는 응용 프로그램 대리자 또는 응용 프로그램의 클래스에 정적 변수를 선언 할 수 있습니다. 자연적으로 수 많은 것들을 위해
var에 대한 읽기 쓰기 권한이 필요하다면이 방법은 효과가 없습니다. E. g. 모든 클래스에서 액세스 할 수있는 암호 또는 세션 ID를 저장하려는 경우 –
이 이모, 전역 변수가 실제로 목표 C에서 많은 감각을, 경향 주어진 :
는 다음 링크를 상수와 정적 변수에 대한 자세한 내용을 보려면 싱글 톤, 특히 뷰 컨트롤러. 이 경우 변수보다는 상수처럼 작용합니다. – devios1실제로 싱글 톤은 전역 변수 (공유 인스턴스)를 사용하여 모든 구성원을 전역으로 만듭니다. 당신은 한 종류의 세계화를 다른 세계화로 바꾸고 있습니다. – Cristik