2010-08-23 2 views
0

이것은 스타일의 문제이다 :스타일 : 목표 C와 토큰 연결

애플이 "_"의 키워드에 대한 민영화, 나는 다음의 라인을 따라 뭔가 생각 보유하고 있기 때문에 :

#import <Cocoa/Cocoa.h> 

#define _(name) pvt_##name 

@interface SFMeasureViewController : NSViewController { 
    @private 
    NSTextField *_(label); 

} 

@property (retain) IBOutlet NSTextField *label; 

@end 


@implementation SFMeasureViewController 

@synthesize label = _(label); 

@end 

이것은 변수를 올바르게 유지하고 폐기하는 데있어 [self label]label 사이의 차이를 강제로 적용하는 데 도움이됩니다. 여기서 코드 내에서 "레이블"이라는 용어를 사용하면 오류가 발생하여 사용자가 self.label 또는 _ (레이블)에 대한 호출을 구분해야합니다.

이제 _(label)에는 _label보다 2 개의 문자 (그 자리에 시프트 문자)가 있습니다. 거기에 다른 좋은 규칙이 있습니까? vLabel? _label처럼 명확한 것은 없지만 예약 된 이후로는 사용하고 싶지 않습니다.

생각, 비평? 필요한 경우 Objective-C++를 사용하여 주로 C++ 작업을 수행하는 스타일 가이드 라인입니다.

감사합니다, 사실

답변

0

글쎄, Apple은 무엇보다도 첫 글자로, 특히 메소드 이름에 _을 사용하지 않을 것을 권장합니다. 그러나 인스턴스 변수의 경우 샘플 코드에서이 원칙에 위배됩니다. 그래서 나는 _... 매크로를 만들지 않고 완벽하게 괜찮다고 생각합니다. 나는 자산 이름 var 대 백업 인스턴스 변수 theVar도 좋아합니다. 이에 대한 자세한 내용은 here의 SO를 참조하십시오.

새로운 런타임 (예 : Mac 또는 iPhone OS 또는 iPhone 시뮬레이터에서 64 비트가 XCode 4로 시작하는 경우)에서는 명시 적으로 보조 인스턴스 변수를 선언 할 필요조차 없습니다. 당신이 @synthesize이 될 때 컴파일러에 의해 ivar이 생성되고 그 ivar에 직접 액세스 할 수 없습니다. 따라서 이러한 플랫폼 만 지원하면 괜찮 으면 가장 좋은 방법입니다.

+1

imho가 합성 된 iVars에 직접 액세스하여 오용을 방지 할 수 있습니다. – kubi

0

, 모듈의 내부 라벨/self.label을 구분하기 어렵지 않다, 그래서 나는 재산과 필드에 같은 이름을 사용하여 어떤 문제가 표시되지 않습니다.

+0

음, 그렇습니다. 'label = nil;'! ='self.label = nil;'나는 메모리 누출을 방지하기 위해 n00b 에러를 피하고 씰링하려고 노력하고있다. –

+0

예, label = nil! = self.label = nil입니다. 하지만, 올바른 코드를 쉽게 작성할 수 있다는 것을 알았습니다. –

+0

나는 할 수있다 - 그것은 나의 팀의 n00bs가 할 수 있다는 것을 의미하지 않는다. 또는 나는 항상 늦은 밤 ME2를 플레이 한 후에 할 것이다. –