3

혼자서 일하거나 Xcode에서 @private 지시어를 사용하면 응용 프로그램의 모든 특성 인 ivars에 액세스 할 수있는 팀은 무엇이 있습니까?@private - 사용 중이 아닌가요?

메모리 사용, 성능 등과 같은 이점이 있습니까? 또는 한 부분이 미래에 바뀔 수있는 물건을 사용해서는 안되는 큰 팀을위한 단지 물건일까요? 클래스 선언의 @interface@private을 사용

감사

답변

4

는 다른 클래스는 인스턴스 변수에 접근을 방지 할 수 있습니다. 이는 캡슐화에 중요합니다. 이는 수십 명의 개발자 팀과 마찬가지로 단일 개발자에게도 마찬가지로 중요합니다.

캡슐화는 내부적으로 작동하는 방식을 알 필요없이 클래스에 대해 제공된 API 만 사용하도록합니다. 길 아래로 가면 구현을 변경할 수 있습니다. 이 클래스를 이미 사용하고있는 클래스에는 영향을 미치지 않습니다. aPI는 변경되지 않고 구현 만됩니다.

ivars는 지정된 클래스의 구현 내에서만 액세스해야합니다. 다른이 반은이 ivars에 접근 할 수 없어야합니다. 그렇지 않으면 코드가 매우 약해지고 유지 관리가 어려워집니다.

편집 : Objective-C를 사용하면 더 이상 .h 파일에 ivars가 없어야합니다. @implementation 행으로 이동 시키십시오.이 행은 개인용으로 보장되며 .h 파일을 사용하는 사람은 누구도 가지고있는이 ivars를 알지 못합니다.

+0

무엇? .h.에서 가져온 예쁜 양동이가 모두 .m에 가야한다는 뜻인가요? ಠ_ಠ 이것은 완전히 이해할 수없는 또 다른 것입니다. 왜 일부 프로그래머는 ivars 및 속성을 같은 이름으로 선언합니까? 내가 항상 생각한 한, 당신이 부동산을 선포하면 같은 이름의 ivar이 필요하지 않습니다 ... 맞습니까? – SpaceDog

+0

나는 ivars를 .h에서 .m으로 옮겨야한다고 말하지 않았다. 나는 캡슐화를 더 촉진하기 때문에해야한다고 말했다. 현대적인 Objective-C를 사용하면'@ property'로 속성을 선언 할 수 있습니다. 그 이전에는'@ property','@ synthesize'를 사용하고 ivar을 선언해야했습니다. 따라서 언제든지이 코드를 볼 수 있습니다. 이전 컴파일러를 사용하여 작성된 코드이거나 최신 컴파일러의 새로운 기능을 사용하지 않은 사람들이 작성한 코드입니다. – rmaddy

+0

그래, 고마워,하지만 난 "@ 합성"에 대해 이야기하지 않고, 나는 "@interface"부분에서 .h에 ivars를 선언하는 사람들에 대해 이야기하고있다. 그리고 같은 이름의 속성을 .h로 선언한다. "@synthesize variable = _variable;"과 같은 것을 사용하여 .m에서 "@ 합성"합니다. – SpaceDog