Apple의 많은 인터페이스가 인스턴스 변수 선언 전에 @private
을 사용하고 있습니다. 이것에 대한 좋은 설계 이유가 있습니까? 제가해야 할 일입니까?인스턴스 변수 표시 @private
답변
개인 인스턴스 변수는 인터페이스를 구현과 분리하는 데 사용됩니다. Objective-C에서 클래스 선언 은에 모든 인스턴스 변수를 표시해야하므로 내부 구현의 일부인 서브 클래스에 액세스하지 못하도록하는 방법이 필요합니다. 그렇지 않으면 다른 프로그래머가 내부 변수에 의존하는 코드를 작성할 수 있기 때문에 클래스 디자이너가 기존 코드를 손상시키지 않으면 서 클래스 내부를 변경할 수 없게됩니다.
다른 방법으로 살펴보면 이 아닌이 아닌 인스턴스 변수는 서브 클래스 프로그래머와의 계약의 일부이며 private로 표시된 인스턴스 변수는 그렇지 않습니다.
즉, 인스턴스 변수는 일반적으로 private로 표시되어 액세스 메소드를 통해서만 액세스 할 수 있습니다. 그렇지 않으면 누군가가 클래스의 하위 클래스를 쉽게 작성할 수 있으며 인스턴스 변수를 public으로 만들기위한 접근자를 만들면됩니다.
하위 클래스에서 변수에 액세스하지 못하도록하려면 @private로 표시하십시오.
@implementation 섹션에서 인스턴스 변수를 선언하는 또 다른 방법이 있습니다. 이러한 변수는 내재적으로 비공개입니다. 출처 : Kochan : Objective-C, 제 4 판 프로그래밍. 피. 그러므로 e.James가 말한 것처럼 클래스 선언이 모든 인스턴스 변수를 보여줘야한다는 것은 사실이 아니다.
@interface에서 인스턴스 변수를 선언하는 유일한 이유는 파생 클래스 (하위 클래스)에 상속 될 수있는 유일한 이유입니다.
앞으로이 작업을 수행하는 올바른 방법은 .m 파일의 클래스 확장에서 선언하는 것입니다. 이것은 개인적인 방법뿐만 아니라 이바라와 속성에도 적용됩니다. 클래스 확장은 이름이없는 카테고리'()'처럼 보이지만 다른 의미와 기능을 가지고 있습니다. – ikuramedia
- 1. 보내기 private 변수
- 2. 인스턴스 변수
- 3. 스칼라 인스턴스 변수 모범 사례
- 4. 초기화시 인스턴스 변수 설정
- 5. 인스턴스 변수 범위
- 6. 인스턴스 변수 유지되지 값은
- 7. NSArray의 인스턴스 변수
- 8. 줄무늬의 인스턴스 변수
- 9. 상수 인스턴스 변수?
- 10. 파이썬 - 인스턴스 변수 액세스
- 11. Java. 인스턴스 변수 길이
- 12. 참조 인스턴스 변수
- 13. 액세스 인스턴스 변수
- 14. ActiveScaffold로 인스턴스 변수 설정하기
- 15. 콜백 함수의 인스턴스 변수
- 16. 변수 이름으로 인스턴스 이름
- 17. 인스턴스 변수 할당?
- 18. 속성 대 인스턴스 변수
- 19. 인스턴스 변수 란 무엇입니까?
- 20. 인스턴스 변수 사용
- 21. 단일 인스턴스 응용 프로그램에서 실행중인 인스턴스 표시
- 22. Xcode 변수 색상 표시
- 23. Objective-C에서 category를 사용하여 @private 인스턴스 변수에 액세스하는 방법은 무엇입니까?
- 24. Visual Studio의 인스턴스 변수 색 지정
- 25. 인스턴스 생성시 해시 변수 초기화
- 26. Ruby에서 클래스 인스턴스 변수 초기화
- 27. 메모리 관리 및 인스턴스 변수?
- 28. Objective-C 인스턴스 변수 포인터
- 29. 코코아에서 인스턴스 변수 명명 규칙
- 30. 인스턴스 변수 캐싱의 이름은 무엇입니까?
자세한 답변을 보내 주셔서 감사합니다. 인스턴스 변수를 공개하기위한 서브 클래스 작성에 관해서는'@ private'이 그들을 공개하는 카테고리로부터 보호하지 않는다고 확신합니다. 생각? –
나는 그것을 시험해 보았고, 당신은 절대적으로 옳았다. 범주에는 개인적인 변수를 포함하여 모든 인스턴스 변수에 대한 액세스 권한이 부여 된 것으로 보입니다. 나는 Objective-C가 정말로 당신이 정말로 원한다면 당신을 매달리기에 충분한 로프를 줄 것이라고 생각한다. –
당신은 여전히 런타임 기능을 사용하여 ivar를 얻을 수있다. 그러나 당신이 그런 일을하고 있다면, 당신은 신뢰할 수 있다고 생각한 수퍼 클래스 ivar에 의존하는 순수하지 않은 것과는 달리, 더러운 해킹이라는 것을 알고 있습니다. – Chuck