문제

새로운 목표-C(지만 장기적인 C/++)프로그래머는 내가 찾는 것에 대한 조언이/권장 사항을 규한 변수입니다.

나 개인적인 기본 설정 것을 활용하는 접두사에 대한 인스턴스의 변수를 모두를 위한 선명도 내에서 기능 및 방지하 숨김 기능 매개 변수입니다.그러나 나는 팬의 속성이 어떤 규칙을 밖으로 접두사(지 않는 한 당신은 또한 접두사 당신의 속성 이름,이는 작동하지 않고 보이는 어리석).마찬가지로 사용할 수 있는"자.변수는"컨벤션,하지만 만약 내가 모든 것을 제공합니다.

그래서 주어진 아래 코드는 무엇을 원하는 이름 스타일 예를 들어/기능 변수가?과하지 않는 경우,귀찮게 당신은 어떻게 다루는 그림자에서 기능 params?

@interface GridItem : NSObject
{
    CGRect _rect;
    ...  
}
@end

-(void) initFromRect:(CGRect)rect
{
    _rect = rect;
    ...
}

Cheers!

도움이 되었습니까?

해결책

가장 코코아 프로젝트를 사용하여 언더로 비IBOutlet 인스턴스의 변수에 접두사로 사용하고,없음에 대한 접두사 IBOutlet 인스턴스는 변수입니다.

그 이유는 내가 사용하지 않는런 난해 이며 대 IBOutlet 인스턴스의 변수는 경우 펜촉 파일이 로드되어 있는 경우 setter 방법에 대해 연결되어 있는 콘센트,그 세터 호출됩니다. 그러나 이 메커니즘가 사용 코딩,그래서 IBOutlet 누구의 이름이 붙으로 언더(예: _myField 가) 설정되지 않는 한 세터 이름이 정확히 출구(예: set_myField:위),표준 및 비니다.

또한,알고 있는 속성을 사용하여 다음과 같 self.myProp 동일한으로 인스턴스에 액세스하는 변수입니다.당신은 당신 메시지 보내기 속성을 사용할 때처럼 사용할 경우 브래킷과 같은 표기 [self myProp].모든 속성을 사용해 간결한 구문을 모두 지정하는 getter 및 세터 한 줄에 다양한 기능을 활용할 수 있으며,합성들이 구현그들은하지 않는 실제 단락 회로 메시지 발송 메커니즘이 있습니다.액세스하려는 경우 인스턴스에 직접 변수하지만 접두어로 self 필요하신료 self 포인터로,아 self->myProp 는 정말 C-타 필드 액세스입니다.

마지막으로,사용하지 않 헝가리 표기 때 쓰는 코코아 코드,그리고 멀리에서 다른 접두사에 다음과 같이"f"및"m_"—는 것입니다 마크 코드로에 의해 쓰여지지 않는 사람"이해"원인이됩니다 볼 수 있도록 그것을 의심하여 기타 코코아 개발자입니다.

일반적으로,따라 조언 코딩에 대한 지침을 코코아 문서 개발자는 애플 연결, 며,다른 개발자들이 선택할 수 있고 이해하는 코드,그리고 코드의 잘 작동 합니다 모든 코코아를 사용하는 기능타 자기 성찰이 가능합니다.

여기에는 창 컨트롤러 클래스는 다음과 같습니,를 사용하여 내 규칙:

// EmployeeWindowController.h
#import <AppKit/NSWindowController.h>

@interface EmployeeWindowController : NSWindowController {
@private
    // model object this window is presenting
    Employee *_employee;

    // outlets connected to views in the window
    IBOutlet NSTextField *nameField;
    IBOutlet NSTextField *titleField;
}

- (id)initWithEmployee:(Employee *)employee;

@property(readwrite, retain) Employee *employee;

@end

// EmployeeWindowController.m
#import "EmployeeWindowController.h"

@implementation EmployeeWindowController

@synthesize employee = _employee;

- (id)initWithEmployee:(Employee *)employee {
    if (self = [super initWithWindowNibName:@"Employee"]) {
        _employee = [employee retain];
    }
    return self;
}

- (void)dealloc {
    [_employee release];

    [super dealloc];
}

- (void)windowDidLoad {
    // populates the window's controls, not necessary if using bindings
    [nameField setStringValue:self.employee.name];
    [titleField setStringValue:self.employee.title];
}

@end

당신이 볼 수 있는 나는 인스턴스를 사용되는 변수를 참조 Employee 에서 직접 나 -init-dealloc 방법을 사용하고있는 동안 나는 숙박 시설에는 다른 방법이 있습니다.는 일반적으로 좋은 패턴 속성:만 터치는 기본 변수의 인스턴스에서 속성에 대해 이니셜라이저에 -dealloc, 고,getter 및 세터한 시설을 제공합니다.

다른 팁

나를 따라 크리스 핸슨의 조언에 관해서 밑줄 ivar 접두사,하지만 나는 내가 사용하는 밑줄을 위해 IBOutlets 니다.그러나 나는 최근 시작하는 이동 IBOutlet 선언 @property 라인,당로 @mmalc 의 제안.이 혜택은 모든 내 ivars 지금 있는 밑줄 및 표준 KVC 세터들이라고(즉 setNameField:).또한,콘센트 이름이 없어 밑줄 인터페이스 빌더입니다.

@interface EmployeeWindowController : NSWindowController {
@private
    // model object this window is presenting
    Employee *_employee;

    // outlets connected to views in the window
    NSTextField *_nameField;
    NSTextField *_titleField;
}

- (id)initWithEmployee:(Employee *)employee;

@property(readwrite, retain) Employee *employee;
@property(nonatomic, retain) IBOutlet NSTextField *nameField;
@property(nonatomic, retain) IBOutlet NSTextField *titleField;

@end

사용할 수 있는 밑줄 접두사에 ivars 고 아직도 사용하여 비 밑줄의 이름을 속성입니다.에 대한 합성 접근,다음과 같이 하면 됩니다:

@synthesize foo = _foo;

이렇게 컴파일러를 합성하는 foo 시설을 사용하여 the_foo ivar.

당신이 쓰는 경우에 당신의 자신의 접근,당신은 단지 사용의 언더 ivar 에서 당신의 구현 및 유지 비 언더 메서드 이름입니다.

개인적으로,따라코 이름 지정 규칙을 사용하여,낙타-케이스를 위한 기능과 변수,그리고 대문자로 낙타-케이스에 대한 개체에 이름(지 않고 최고의 NS of course).

내가 찾는 형로 붙여 만든 코드를 더 불투명한 사람을 쓰지 않았어요 그것은(이후 모든 변함없이 사용하는 다른 접두사),그리고 현대 IDE 그것은 정말 어려운 뭔가 그림의 형식입니다.

의 소개와 속성을 나에 대한 필요성을 볼 수 없습니다 추가"_"를 클래스의 인스턴스는 변수입니다.당신은 설정할 수 있습니다 간단한 규칙(에 설명된 헤더 파일)어떤 변수가 액세스할 수 있 외부 등을 통해 액세스해야 합성 또는 를 사용하여 사용자 지정 메서드에 클래스에 영향을 미칠하는 값입니다.내가 이것을 보이 많기보다는 이름으로"_"앞에 붙어 그들을.그것은 또한 제대로 캡슐화한 값을 제어할 수 있도록 그들이 어떻게 변경되었습니다.

내가 사용하고 싶지 않다는 밑줄로 접두사에 대한 어떤 식별자이기 때문에,C 및 C++모두 예약 특정한 밑줄 접두사에 대한 사용에 의해 구현됩니다.

나는 생각을 사용하여"self.변수"추한 모습이 됩니다.

일반적으로,사용 꾸밈 식별자(즉,접두사나 접미사)예를 들 변수입니다.하는 경우 등은 그렇게 복잡하는 기억할 수 없는 변수를 인스턴스,당신이 문제입니다.그래서 위의 예에서,나는 사용"rect"으로 인스턴스 이름을 변수"newRect"또는"aRect"으로 매개변수 이름입니다.

앤드류:이 실제로 많은 개발자 코코아를 사용하지 않는 인스턴스의 변수에 접두사에서 모두.그것은 또한 매우 일반적인에 Smalltalk 세상(실제로,말한 그것은 거의에서 들어본 적도 없 Smalltalk 사용하는 접두사에스 변수).

접두사에서 인스턴스의 변수를 항상 나를 강으로 C++-ism 는 가지고 있었는 Java 한 후 C#입니다.이후 Objective-C 세계가 크게 평행하게 C++세계 어디에 같이 Java 와 C#세계는 후계자를,그것을 설명할 것인가"문화"차이가 당신이 볼 수 있습니다 이 사이의 다른 세 개발자입니다.

나의 스타일입니다 하이브리드 및 정말에서 이월이 발전소는 일:

가장 유용한 접두사가 사용하는"에서"그리고""위한 함수/방법을 매개 변수입니다.이것은 당신이 무엇을 알고 매개 변수를 위해 한 눈에 정말 도움이 충돌을 방지하는 방법을 사 매개 변수와 변수를 인스턴스(얼마나 많은 시간을 당신이 볼 수있는 매개 변수 테이블""분쟁으로 인스턴스의 변수 이름과 같).E.g.:

- (void)doSomethingWith:(id)inSomeObject error:(NSError **)outError;

다음 사용 베어 인스턴스 이름을 변수와 속성 이름:

다음 사용"이"접두사로에 대한 지역 변수:theTable,theURL,etc.다시 이를 구별하고 인스턴스는 변수입니다.

그런 다음과 같은 동력 스타일 내가 사용하는 소수의 다른 접두사:k 에 대한 상수로,이에 대한 열거형,g globals,s 에 대한 통계.

내가 사용했던 이 스타일을 위해 무언가가 다음과 같은 12 년이 됩니다.

내가 사랑하는 동안 사용하는 밑줄에 대한 접두사 ivars,나는 혐오 쓰기 @synthesize 라인 때문에 모든 복제(되지는 않지 ).내가 만들어 매크로 데 도움이 이렇게 줄일 코드를 제공합니다.따라서,대신:

@synthesize employee = _employee;

I write this:

ddsynthesize(employee);

그것은 간단한 매크로를 사용하여 토큰을 붙여 추가 밑줄을 오른쪽:

#define ddsynthesize(_X_) @synthesize _X_ = _##_X_

하지만 그것이 혼동 Xcode 의 refactoring 도구,그리고 그것은 하지 않습니다 이름이 바뀌는 경우에,이름을 변경하여 숙박 시설에 refactoring.

와 함께 무엇을 말했다 여기를 읽어야 합 코코아 문서에는 키 값을 관찰하 준수 이름.엄격히 다음과 같은 이 패턴은 크게 도움이 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top