2009-04-03 5 views
1

xCode 3에서 개인 인스턴스 변수를 클래스에 정의했습니다. 클라이언트 코드의 private 변수에 직접 액세스 할 때 컴파일러가 왜 오류가 아닌 경고 만 표시합니까? 코드는 여전히 실행될 수 있습니다. 이 경고는 아마도 이것이 미래의 어려운 오류라고 말합니다. "단단한 오류"는 무엇을 의미합니까? 감사.Objective-C의 개인 인스턴스 변수 정보

답변

0

글쎄, 하드 오류는 경고가 아닌 미래에 오류가 발생한다는 것을 의미합니다. 왜 지금 경고인지, 확실하지 않습니다. 나는 클래스에 존재하지 않는 메서드를 호출하려고 할 때도 경고 일 뿐이라는 동일한 이유 때문이라고 생각합니다.

+0

Objective-C의 동적 특성으로 인해 클래스에 존재하지 않는 메서드를 호출 할 수 있습니다. 컴파일러가 컴파일 할 때 컴파일러가 알고 있는지 여부에 관계없이 런타임에 클래스에 메시지를 보낼 수 있습니다. – Abizern

+0

맞아요. 멤버 변수가 같은 방식으로 작동한다고 생각했습니다 (예를 들어 PHP 에서처럼). –

1

하드 오류는 언젠가 나중에 컴파일러가 예상대로 작동한다고 정의합니다 (즉, 정의 된 가시성 범위 외부의 인스턴스 변수에 직접 액세스 할 때 소스 파일을 컴파일하지 않음).

지금 컴파일러는 단순히 Objective-C에 가시성 제한을 적용하지 않습니다. 그러나 경고는 당신이하지 말아야 할 일을하고 있다고 생각 나게하고, 우연히 그 일에주의를 기울 이도록합니다.

가시성이 적용되지 않는 이유에 대한 추측을해야한다면 재단 도서관과 CoreFoundation 라이브러리 사이의 모든 수신자 부담 브리징 자료로 인해 상당한 양의 엄격히 말해서 보이지 않아야하는 인스턴스 변수에 접근하는 라이브러리 코드.

일반적으로 어쨌든 인스턴스 변수에 직접 액세스하는 것은 좋지 않습니다. Obj-C 2.0을 사용할 수있는 한 순수 데이터 모델 객체를 설계 할 때 속성과 같은 것을 사용하는 것이 좋습니다.