2014-03-13 5 views
0

내 코드를 정리하려면 몇 줄 이상의 코드에 #define을 사용하는 것이 좋습니다. 대부분의 예제는 치수를 정의하는 몇 줄의 코드입니다.
예제에서 저는 다음 코드에 대해 별도의 헤더 파일을 가지고 있습니다. 이런 식으로 #define을 사용하는 것이 좋습니다.#define을 사용하는 것이 좋습니다.

#define KCHECKREFERENCE if([self.partClasses containsObject:@"Part1"]||[self.partClasses containsObject:@"Part2"]||[self.partClasses containsObject:@"Part3"]||[self.partClasses containsObject:@"Part4"]||[self.partClasses containsObject:@"Part5"]||[self.partClasses containsObject:@"Part6"]||[self.partClasses containsObject:@"ICDomesticEICPart7"]||[self.partClasses containsObject:@"ICDomesticEICPart8"]){\ 
[self.currentPartView save];\ 
self.previousPartView = self.currentPartView;\ 
int nextPartNumber = 1;\ 
ICCertificateComponent *part = [self loadPart:nextPartNumber];\ 
self.currentPartView = part;\ 
CGRect nextPartViewFrame = self.currentPartView.view.frame;\ 
nextPartViewFrame.origin.x = 320.0f;\ 
self.currentPartView.view.frame = nextPartViewFrame;\ 
CGRect previousPartViewFrame = self.previousPartView.view.frame;\ 
previousPartViewFrame.origin.x = -320.0f;\ 
nextPartViewFrame.origin.x = 0;\ 
[self.view insertSubview:self.currentPartView.view belowSubview:self.navBarView];\ 
NSTimeInterval duration = 0.1;\ 
[UIView animateWithDuration:duration\ 
       animations:^{\ 
        self.previousPartView.view.frame = previousPartViewFrame;\ 
        self.currentPartView.view.frame = nextPartViewFrame;\ 
       }\ 
       completion:^(BOOL finished) {\ 
        self.currentPartNumber = 1;\ 
        self.navBarView.prevButton.enabled = NO;\ 
        self.navBarView.nextButton.enabled = YES;\ 
        [self.previousPartView.view removeFromSuperview];\ 
        self.previousPartView = nil;\ 
        if (self.currentPartView.showsShareOptions == YES) {\ 
         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Share" style:UIBarButtonItemStyleBordered target:self action:@selector(shareButtonPressed:)];\ 
        }\ 
       }\ 
];\ 
+0

코드 정리에 도움을 요청할 수있는 가장 좋은 곳은 CodeReview입니다. http://codereview.stackexchange.com/questions – nhgrif

답변

5

아니요. 특히 그렇게 구체적인 것은 아닙니다.

#define 대신이 코드를 메서드에 넣으십시오.

+0

이 코드가 더 작고 빠르게 실행되도록 인라인해야하는 경우 메서드에 넣고 싶지 않을 수 있습니다. 크기를 감안할 때 메서드 호출의 오버 헤드는 아주 작습니다. – AnthonyLambert

+0

그건 사실 일지 모르지만 확실히 여기서는 그렇지 않습니다. 또한 이것은 코드 정리 문제이며 최적화 문제는 아닙니다. – nhgrif

+1

@AnthonyLambert @ nhgrif1이 쓴대로, 그것은 사실이 아닙니다. 또한 똑똑해 지려고하지 마십시오. LLVM은 자신의 물건을 최적화 할 때 훨씬 더 똑똑 할 수 있습니다. 또한 가독성이 뛰어나고, 디버깅도 복잡합니다 ... 엉망입니다 ... 인라인이 필요한 경우 ObjC 메서드에서 호출 할 수있는'인라인 (inline) 'C 함수를 사용하지 않는 것이 어떻습니까? – robertvojta

2

나는 정의가 좋은 연습 인 경우를 알고 있습니다. 예를 들어 _countof 매크로

#if !defined(_countof) 
#if !defined(__cplusplus) 
#define _countof(_Array) (sizeof(_Array)/sizeof(0[_Array])) 
#else 
template <typename _CountofType, size_t _SizeOfArray> 
char (*__countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray]; 
#define _countof(_Array) sizeof(*__countof_helper(_Array)) 
#endif 
#endif 

당신의 KCHECKREFERENCE는 악합니다. 대신 inline 기능을 사용해야합니다. 왜? 적어도 당신의 매크로 안에 breakpoint를 설정할 수 없기 때문에.

+1

포인트를 나눌 수 없습니다 - 좋은 점 .... – AnthonyLambert

관련 문제