2010-05-21 7 views
0

QuartzDemo 예제 응용 프로그램을 수정 중이며 이미 포함되어있는 다른 클래스의 정수 유형 변수 값을 설정하고 읽으 려합니다.다른 클래스에서 변수 값을 설정하고 액세스하는 방법

예를 들어, MainViewController.m에서 QuartzImages.m 파일에서 숫자 값 (1-100부터 간단한 숫자)을 변수로 설정하고 싶습니다.

질문은 변수를 올바르게 정의하고, 값을 설정하고 액세스 (읽기)하는 방법입니다.

나는 일반적으로의 Obj C와 아이폰 SDK와 초보자를 오전 델파이와 VB와 경험이 있지만, 이것은 전혀 도움이되지 않습니다 :)

감사합니다, 누구든지 당신이 어디에 있든, 사람은 누구 것 이 끝없는 인터넷 검색에서 나를 빼내십시오.

답변

1

변수가있는 경우 속성을 읽거나 설정하는 두 가지 방법 (일반적으로 ivar 및 접근 자 메서드의 조합)이 있습니다. (여전히 선호) 오래된 방법은 직접 접근 방법을 사용하는 것입니다

//MYObject *obj, with int property foo 
int i = [obj foo] 
[obj setFoo:32] 

새로운 방법은 전용 속성 작동 도트 구문을 (사용하는 것입니다, 그리고 더 복잡한 방법을 사용할 수 없습니다) :

int i = obj.foo //equivalent to [obj foo] 
obj.foo = 32 //equivalent to [obj setFoo:32] 

이 당신을 혼동하는 경우, 내가보기 엔 Aaron Hillegass's book의 사본을 따기 권하고 싶습니다. 그것은 코코아와 Objective-C를 아주 자세하게 설명합니다.

편집 : 여기서 혼란스러운 점은 용어와 관련이 있다고 생각합니다. Objective-C에서 대부분의 객체는 실제로 데이터를 저장하는 인스턴스 변수 (ivars)를 가지고 있습니다. 그러나 일반적으로 당신은 ivars, 특히 다른 객체로부터 직접적으로 접근하는 것을 피하기를 원합니다. (이것은 객체 지향 설계의 원칙이며 Objective-C에만 국한된 것은 아닙니다.)

Person 인스턴스 변수가 age 인 클래스가있는 경우 유연성을 높이기위한 주된 이유가 있습니다. 예를 들어, 동적으로 나이를 결정하기 위해 미래에 내 구현을 변경할 수 있습니다. 다른 클래스가 인스턴스 변수 age에 의존하면 구현이 변경되면 중단됩니다.

이 문제를 해결하는 방법은 ivar에 대한 액세스를 제어하는 ​​접근자인 접근자를 사용하는 것입니다. Objective-C에서 "getters"는 변수를 가져오고 대개 변수와 동일한 이름으로 지정됩니다 (예 : 예에서 getter는 -(int)age). "setter"가 변수를 설정합니다 (이름은 -(void)setAge:(int)theAge). 접근자를 사용하면 미래의 구현을 자유롭게 변경할 수 있으며 필요에 따라 ivar을 완전히 제거 할 수도 있습니다. 오브젝티브 C에서

, 아이바 및 접근의 조합들은 (필요가 없지만 값은 동적으로 생성되는 경우, 바르 있어야)는 "등록"이라한다. 라고요 구현 세부 사항 - 당신은 속성의 관점에서 생각한다면, 당신은 다른 클래스의 인스턴스 변수에 대해 걱정할 필요가 없습니다.

//Person.h 
@interface Person : NSObject { 
    int age; 
} 

@property (assign) int age; //declares the accessors 

@end 

//Person.m 
@implementation Person 

@synthesize age; //implements -(int)age and -(void)setAge:theAge 

@end 

기억해야 할 중요한 것은 대부분의 시간, 당신은 속성이 아닌 인스턴스 변수의 관점에서 생각해야한다이다 : 오브젝티브 C 2.0 속성을 만들기위한 몇 가지 좋은 문법 설탕 있습니다. 다른 클래스의 이바라기에 직접 액세스해서는 안됩니다. 수퍼 클래스에서 ivars에 액세스하는 경우는 거의 없습니다.만약 당신이 순수 주의자라면 접근 자 (예 : initdealloc)를 제외하고는 동일한 클래스의 이바라 (ivars)에 직접 액세스해서는 안됩니다 (후자의 두 가지는 논쟁의 대상이됩니다).

+0

답장을 보내 주셔서 감사합니다. 정말로 혼란 스럽습니다. 저는 현재 애플이 제공하는 "객관적인 C 프로그래밍 언어"책을 읽음으로써 그것을 알아 내려고 노력하고 있지만 공개 변수는 그들에 따라 피해야합니다. 그러면 올바른 방법은 무엇입니까? 하나의 viewcontroller는 사용자 입력을 얻은 다음 정수 변수에 할당 할 숫자를 결정합니다. 그 후에 다른 viewcontroller가 표시되고 해당 viewcontroller가이 번호를 찾고 있습니다. 1 .m 파일에서 생성 된 간단한 값을 다른 .m 파일로 전달하는 방법은 무엇입니까? 너무 단순하지만 그렇게 어려운 것 같아요 – BittenApple

+0

(업데이트 된 답변보기) – shosti

+0

내 질문에 답해 주셔서 대단히 감사합니다. 왜 그렇게 자세한 설명을 쓰려고 많은 노력을 기울 였는지 모르겠습니다. 도움을 기꺼이하는 당신을 좋아하는 사람들은 요즘 만나는 것이 매우 어렵습니다. 다시 한번 감사드립니다. – BittenApple

관련 문제