2009-03-18 7 views
8

아마 이것에 대한 매우 간단한 해결책이 있지만 작동시키지 못할 수 있습니다.다른 클래스의 변수에 어떻게 액세스합니까?

내 코코아 파일에 여러 클래스가 있습니다. 클래스 중 하나에서 class1 나는 다른 클래스에서 사용해야하는 변수를 만듭니다 class2. class2에이 변수를 가져 오는 간단한 방법이 있습니까?

+0

"내 코코아 파일에 여러 개의 클래스가 있습니다."일반적인 방법은 각 클래스에 대해 한 쌍의 파일 (MyClass.h, MyClass.m)을 만드는 것입니다. 프로젝트에서 그룹을 마우스 오른쪽 버튼으로 클릭하고 파일 추가를 클릭하면됩니다. .m을 만들면 .h가 무료로 제공 될 것입니다. –

+1

인스턴스 변수에 직접 액세스하는 것은 매우 나쁜 생각입니다. 속성을 사용하고 접근자를 합성하거나 직접 작성하십시오. 직접 변수 액세스는 Mac OS X에서 KVO 및 바인딩과 같은 문제를 해결하며 좋은 OO 실천이 아닙니다. – Alex

답변

13

변수를 public으로 만들거나 속성으로 만들 수 있습니다. 예를 들어, 공개 할 수 있습니다 :

@interface Class1 
{ 
    int var; // @protected by default 
} 
@property (readwrite, nonatomic) int var; 
// methods... 
@end 

@implementation Class1 
@synthesize var; 
... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj.var = 3; // implicitly calls [obj setVar:3] 
int x = obj.var; // implicitly calls x = [obj var]; 
+2

속성 접근 방식이 훨씬 뛰어납니다. IMHO – Abizern

6

당신은 속성으로 Class2의에서 변수에 노출 될 수 :

@interface Class1 
{ 
@public 
    int var; 
} 
// methods... 
@end 

// Inside a Class2 method: 
Class1 *obj = ...; 
obj->var = 3; 

가 그것을 속성을 확인합니다. class1에 class2에 대한 참조가 있으면 class1에 해당 변수가 표시됩니다. 솔직히, 당신은 Objective-C와 객체 지향 프로그래밍의 초보자 인 것 같습니다. 나는 당신이 양쪽 모두에 대해 더 읽기를 권한다.

Here is a place Objective-C로 객체 지향 프로그래밍을 시작할 수 있습니다.

+3

"stackoverflow.com"은 고급 사용자 만 사용할 수 있습니까? 누가 초보자인지, 누가 누구인지 정의하는 법.그 남자는 객관적인 C를 어디서 배울 것인가에 대해 의문을 제기하지 않았습니다. –

+3

솔직히 @DariusMiliauskas와 동의합니다 : P – preetam

3

앱 전체에서 액세스해야하는 변수가 들어있는 파일을 만들어보세요.

extern NSString *stringVariable; 

@interface GlobalVariables 

@property (retain, nonatomic) NSString *stringVariable;  

@end 

과 GlobalVariables.m 파일에만큼 당신이 GlobalVariables.h에 이제까지하는 .m 파일을 가져올 때 당신은 당신이 할당 할 수 있습니다에 변수 및 액세스에 접근 할 필요가 다음

#import "GlobalVariables.h" 

@implements GlobalVariables 

@synthesize stringVariable; 

NSString *stringVariable; 

@end 

그리고 추가 프로그램 전체 어디에서나 사용할 수 있습니다.

편집

내가 위에서 준 내 대답은 다르게 내가 지금이 일을 가겠어요 방법이 아니다. 나는 "엑스 코드"에서

// ..... 
MyClass *myClass = [[MyClass alloc] init]; 
[myClass setMyVariable:@"My String to go in my variable"]; 
// ..... 
1

을 것보다 몇 가지 방법에서 다른 클래스의

@implementation MyClass 

@sythesize = myVariable = _myVariable; // Not that we need to do this anymore 

@end 

그런 다음하는 .m 파일에 다음

@interface MyClass 

@property (nonatomic, strong) NSString *myVariable; 

@end 

처럼 그것은 것입니다 당신이 필요 가져 오기를 만들고 속성으로 선언하여 객체를 만든 다음 "object.variable"구문을 사용합니다. "Class2.m"파일은 다음과 같이 표시됩니다.

#import Class2.h 
#import Class1.h; 

@interface Class2() 
... 
@property (nonatomic, strong) Class1 *class1; 
... 
@end 

@implementation Class2 

//accessing the variable from balloon.h 
...class1.variableFromClass1...; 

... 
@end 

감사합니다! :-)

관련 문제