iOS / OSX 오픈 소스 프로젝트의 명명 규칙


12

항상 그런 것은 아니지만 대부분의 경우 저자 이름의 첫 글자로 시작하는 이름을 가진 iOS 또는 Mac OS X 오픈 소스 프로젝트를 찾을 수 있습니다. Nick Leblanc이 프로젝트를 작성한 경우 프로젝트는로 읽습니다 NLMyProject.

예 :

어디에서 왔습니까? 한 사람이 먼저 이런 식으로 글을 썼다가 다른 사람이 따라 왔습니까?

Apple Guidelines 에서조차도 그것에 대해 아무것도 찾을 수 없었습니다 . 그 관용구가 어디에나 쓰여 있습니까?


1
좋은 질문과 멋진 오픈 소스 예제! ;-)
레오 나탄

답변:


16

C와 마찬가지로 목표 C에는 네임 스페이스가 없습니다. 이것은 누군가가 이미 함수 foo또는 클래스를 정의한 경우 Bar전역 적으로 고유해야하며 정의 수 없음을 의미합니다. 코드가 있고 다른 라이브러리를 추가하면 갑자기 이상한 곳에서 문제가 발생할 수 있습니다.

이다 이 애플 제시 한 가이드 라인 표기 : 목표 C 프로그래밍 아이폰 OS 개발자 라이브러리 섹션 :

일부 이름은 앱에서 고유해야합니다.

새로운 유형, 기호 또는 식별자를 만들 때마다 먼저 이름이 고유해야하는 범위를 고려해야합니다. 때때로이 범위는 연결된 프레임 워크를 포함한 전체 응용 프로그램 일 수 있습니다. 때로는 범위가 단지 묶는 클래스 또는 심지어 코드 블록으로 제한됩니다.

클래스 이름은 전체 앱에서 고유해야합니다

Objective-C 클래스는 프로젝트에서 작성하는 코드뿐만 아니라 포함 할 수있는 모든 프레임 워크 또는 번들에서 고유하게 이름을 지정해야합니다. 예를 들어, ViewController 또는 TextParser와 같은 일반 클래스 이름을 사용하지 마십시오. 앱에 포함하는 프레임 워크가 규칙을 따르지 않고 동일한 이름으로 클래스를 만들지 못할 수 있습니다.

클래스 이름을 고유하게 유지하려면 모든 클래스에 접두사를 사용하는 것이 규칙입니다. Cocoa 및 Cocoa Touch 클래스 이름은 일반적으로 NS 또는 UI로 시작합니다. 이와 같은 두 글자 접두사는 프레임 워크 클래스에서 사용하기 위해 Apple에 의해 예약되어 있습니다. Cocoa 및 Cocoa Touch에 대한 자세한 내용을 살펴보면 특정 프레임 워크와 관련된 다양한 접두사가 나타납니다.

...

자신의 클래스는 세 개의 접두사를 사용해야합니다. 회사 이름과 앱 이름의 조합 또는 앱 내의 특정 구성 요소와 관련이있을 수 있습니다. 예를 들어 회사가 Whispering Oak라고하고 Zebra Surprise라는 게임을 개발하는 경우 클래스 접두사로 WZS 또는 WOZ를 선택할 수 있습니다.

따라서, 여러분이 언급 한 라이브러리는 이러한 관례를 어기는 것이지만, Objective C 내에서 이름 공간이 부족하다는 문제의 핵심입니다.


NSHipster에 의한 추가 읽기 이름 지정
Objective-C 네임 스페이스 충돌을 해결하는 가장 좋은 방법은 무엇입니까?
iOS objective-c 코드에서 네임 스페이스를 어떻게 사용합니까?


오브젝티브 C와 같은 사운드는 정말 네임 스페이스를 필요로 ...
크리스 Cirefice에게

1
@ChrisCirefice 정말 좋을 것입니다. 그러나 Objective C는 C 위에 얇은 층이라는 것을 알아야합니다. 이름 공간을 도입하려고 시도하면 문제를 일으키지 않고 보이는 것보다 어려울 수 있습니다. 에 파고 -C 목표 네임 스페이스를하지 왜 것은 무엇입니까? Clang 개발자-Objective-C에 네임 스페이스 추가를 발견했습니다 . @C에서 사용되지 않기 때문에 사용된다는 것을 기억하십시오 .

1
@ChrisCirefice 네임 스페이스는 아무것도 해결하지 못합니다. 접두사 충돌은 네임 스페이스 충돌이됩니다.
Miles Rout

@MichaelT Objective C는 한동안 C 위에 얇은 층이 아니었다 (Objective C 2.0). 이제 애플은 네임 스페이스와 같은 더 현대적인 기능을 포함하는 스위프트에 포커스를 이동하지만, 현재 목표 C.의 다른 기능이 부족했다
레오 나탄
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.