2012-04-22 3 views
6

몇 가지 상수를 몇 가지 다른 viewController 및 NSObject 클래스 atm으로 코딩했습니다. 내 일을하는 사람들 중 한 명이 자신의 클래스 (즉, 상류 클래스)에 넣어야한다고 말했습니다.objective c 상수 클래스

나는이 유형의 디자인에있어 프로와 죄수가 무엇인지 궁금해합니다. 그것을하는 방법에 대한 어떤 설명도 잘 될 것입니다.

예를 들어 새 NSObject 클래스를 만들고 거기에 #defines를 넣으시겠습니까? 그럼 내가 그들을 사용해야 할 때 그냥 내 상수 클래스를 서브 클래스하고 다른 클래스 또는 다른 변수에서 변수처럼이 클래스 내부의 상수를 사용합니까? 어떤 도움이 크게 appreicated 것 즉

myclass.theConstant 

.

+1

Manjunath가 훌륭한 답변을 게시했습니다. http://stackoverflow.com/a/2377432/1218605 –

답변

11

정수를 사용하는 것들로 정수를 넣으십시오. 전역 "모든 상수"파일을 만들지 마십시오. 이렇게하면 코드를 재사용하는 데 큰 어려움이 있습니다. 예를 들어, 통지를 게시하는 경우 통지 이름 문자열이 필요합니다. 알림을 게시하는 클래스에이를 넣으십시오.

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

상수는 일반적으로 메소드 또는 정의가 아닙니다. 그들은 위와 같이 단순한 전역입니다. 가능한 한 #define을 사용하지 말아야하지만 꽤 유용한 곳이 있습니다 (상수가 UIColor 인 객체가 있습니다. 그렇지 않으면 초기화에 실망합니다).

예제를 보려면 Apple 헤더 파일에서 약간 시간을 보내십시오. UIWindow.h, UITableViewCell.h 및 UITableView.h에서 상수가 일반적으로 정의되는 몇 가지 좋은 예를 살펴보십시오.

+0

멋지다. 답장을 보내 주셔서 감사합니다. #define이 왜 나쁜가? 그냥 호기심. –

+0

왜 정의가 상수에 나쁜지 궁금합니다. 유형 안전이 없기 때문입니까? – borrrden

+4

범위 지정. 안전을 입력하십시오. 디버거에서 평가할 수 있습니다. 더 나은 정보 숨기기. 상수를 변경해도 전체 프로그램을 다시 컴파일 할 필요는 없습니다. 정의가 우연히 재정의 된 경우 마음이 구부러지지 않는 컴파일 문제를 피하십시오. #define이 필요한 경우와 예외적 인 경우가 있습니다. 하지만 디폴트는 Objective-C로 코드를 작성하는 것이지 전처리 매크로 언어로 작성해서는 안됩니다. 다시 말하지만, Apple SDK를 보면 매우 특정한 경우 (NSAssert 등)를 제외하고는 #define이 눈에 띄게 부족하다는 것을 알 수 있습니다. –

0

방금 ​​ 인 경우 어떤 수업도 필요하지 않습니다. 단지 자신의 .h 파일에 붙여 두는 것입니다.