변수가있는 경우 속성을 읽거나 설정하는 두 가지 방법 (일반적으로 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에 액세스하는 경우는 거의 없습니다.만약 당신이 순수 주의자라면 접근 자 (예 : init
및 dealloc
)를 제외하고는 동일한 클래스의 이바라 (ivars)에 직접 액세스해서는 안됩니다 (후자의 두 가지는 논쟁의 대상이됩니다).
답장을 보내 주셔서 감사합니다. 정말로 혼란 스럽습니다. 저는 현재 애플이 제공하는 "객관적인 C 프로그래밍 언어"책을 읽음으로써 그것을 알아 내려고 노력하고 있지만 공개 변수는 그들에 따라 피해야합니다. 그러면 올바른 방법은 무엇입니까? 하나의 viewcontroller는 사용자 입력을 얻은 다음 정수 변수에 할당 할 숫자를 결정합니다. 그 후에 다른 viewcontroller가 표시되고 해당 viewcontroller가이 번호를 찾고 있습니다. 1 .m 파일에서 생성 된 간단한 값을 다른 .m 파일로 전달하는 방법은 무엇입니까? 너무 단순하지만 그렇게 어려운 것 같아요 – BittenApple
(업데이트 된 답변보기) – shosti
내 질문에 답해 주셔서 대단히 감사합니다. 왜 그렇게 자세한 설명을 쓰려고 많은 노력을 기울 였는지 모르겠습니다. 도움을 기꺼이하는 당신을 좋아하는 사람들은 요즘 만나는 것이 매우 어렵습니다. 다시 한번 감사드립니다. – BittenApple