대부분의 Cocoa 프로젝트는 밑줄을 IBOutlet
인스턴스 변수 접두사로 사용하고 IBOutlet
인스턴스 변수에는 접두어를 사용하지 않습니다.
IBOutlet
인스턴스 변수에 언더 바를 사용하지 않는 이유는 nib 파일을로드 할 때 연결된 콘센트에 대한 setter 메서드가 있으면 해당 setter가 호출된다는 것입니다. 그러나이 메커니즘 하지 사용 키 - 값 코딩, 예를 들어 이름이 언더 (예_myField
)로 시작하는 세터의 이름은하지 않는 정확히 콘센트처럼 설정할 수 없습니다 것 (그래서 함께 IBOutlet을한다 set_myField:
)이며 비표준이며 총체적입니다.
또한 self.myProp
과 같은 속성을 사용하면 이 아니라이라는 인스턴스 변수에 액세스하는 것과 같은 점에 유의하십시오. [self myProp]
과 같이 대괄호 표기법을 사용하는 경우와 마찬가지로 속성을 사용할 때 메시지를 보내려면입니다. 모든 속성은 getter와 setter를 한 줄로 지정하는 간결한 구문을 제공하며 구현을 종합 할 수 있습니다. 실제로 메시지 발송 메커니즘을 단락시키지 않습니다. 인스턴스 변수에 직접 액세스하지만 접두사를 접두어로 붙이려면 self
을 포인터로 처리해야합니다. self->myProp
은 실제로 C 스타일 필드 액세스입니다.
마지막으로 코코아 코드를 작성할 때 헝가리 표기법을 사용하지 말고 "f"와 "m_"과 같은 다른 접두어를 사용하지 마십시오. 코드를 "이해하지 못하는"사람이 작성한 것으로 표시합니다. 다른 코코아 개발자들에 의해 의심받을 수 있습니다.
일반적으로 Coding Guidelines for Cocoa 문서의 조언 (Apple Developer Connection)을 따르십시오. 다른 개발자는 코드를 선택하고 이해할 수 있으며 런타임 내성 검사를 사용하는 모든 Cocoa 기능과 잘 작동합니다. 반면,
// 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
당신은 내 -init
및 -dealloc
방법으로 직접 Employee
를 참조하는 인스턴스 변수를 사용하고 있음을 볼 수 있습니다 : 여기
는 윈도우 컨트롤러 클래스 내 규칙을 사용하여 어떻게 보이는지이다 다른 메소드에서이 속성을 사용하고 있습니다. 이것은 일반적으로 속성이있는 좋은 패턴입니다. 이니셜 라이저의 속성 인 기본 인스턴스 변수 인
-dealloc
과 속성의 getter 및 setter 만 터치하면됩니다.
Apple의 UITextView 접두어는 ivars에 m_을 붙입니다. –
... 그리고? 그건 좋은 생각이 아니야. :) –