당신은 종종 하드 빠른 규칙으로 진술이 많은 의견을거야.
예 :
매디 다음 .H에서 인스턴스 변수를 넣어하지 마십시오. ivars는 항상 개인 공개 이어야하며 이는 대중에 속하지 않음을 의미합니다. 당신이 인스턴스 변수를 만드는 경우하는 .m 파일
내가 매디 엄청난 존경에 을 넣어,하지만 난이 일에 그와 함께 동의하지 않는다.
.m 파일에 iVars를 넣으면 다른 클래스에서 숨겨 지지만 자신이 만든 하위 클래스에서도 숨겨집니다.
인스턴스 변수를 @protected로 표시하는 것이 좋으며,이를 사용하면 서브 클래스에서 사용할 수 있지만 다른 클래스에서는 사용할 수 없게됩니다.
다른 모든 것은 당신이 모든 속성을 만들라고 말합니다. ARC가 시작되기 전에 속성의 setter를 사용하여 객체의 메모리를 관리 할 수 있으므로 모든 객체를 속성에 저장하는 것이 좋습니다. (유지 된 속성에 값을 할당 할 때 setter는 먼저 이전 값을 해제하고 새 값을 유지합니다.) 이제 ARC가 iVars에 대해서도 처리하므로 모든 것을 속성으로 만드는 인수가 적습니다.
- 나는 특별한 동작과 사용자 정의 게터 또는 세터 방법이 필요합니다 내가 무엇
은 바르가,하지 않는 한 모든 것을 확인하는 것입니다.
- 다른 개체의 값에 액세스하려고합니다.
- 다른 스레드에서 액세스하려면 속성을 "원자"로 표시해야합니다. (귀하의 모든 속성을 선언하는 습관을 "비 원자."당신은, 당신은 비 원자 원하는 위해입니다 원자 모르는 경우. 원자 특성 비 원자보다 더 느립니다.)
을 말하자면 정책 I NEVER은 물적 자산을 제외한 다른 오브젝트의 iVars에 액세스합니다.
인스턴스 변수가 아닌 속성 사용시 작지만 실제 양의 오버 헤드가 있습니다. 읽기/쓰기 속성은 항상 메서드 호출을 만듭니다. iVar는 메서드 호출의 오버 헤드없이 직접 메모리에 액세스합니다. 일반적으로 그 차이는 너무 작아서는 안됩니다. 그러나 대형 이미지에서 모든 픽셀에 무언가를 수행하거나 실시간으로 비디오 또는 오디오 샘플을 처리하는 콜백을 처리하는 것과 같이 수백만 건의 작업을 수행하는 경우 차이가 커질 수 있습니다.
get/set 논리를 제어하려면 속성을 선언하십시오. 또한 당신이 가지고있는 ivar에 상응하는 속성은 약하지 않을 것입니다. –
.h에 ivars를 넣지 마십시오. ivars는 항상 공개적으로 속하지 않는 개인적인 의미 여야합니다. ivars를 만들면 .mars 파일에 넣으십시오. – rmaddy
나는 거의 말할 수 없다. objC 유형의 경우 항상 속성을 사용하십시오. 구현에서 ivar를 사용해야하는 경우 어쨌든 할 수 있습니다. 예를 들어 속성으로 C++ 참조를 사용하는 데 문제가있어서 objC 유형을 보았습니다. –