2013-05-02 5 views
1
#import "ViewController.h" 

@interface ViewController() 
{ 
    NSString *string; 
} 
@end 

@implementation ViewController{ 
    NSString *string; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

이 두 문장의 차이점은 무엇입니까? 어떤게 더 좋아?이 두 문장의 차이점은 무엇입니까?

+1

@ 보리스 그것은 완전히 다른 질문입니다. – rmaddy

+0

ivars (그리고 암시 적 ivars가 속성을 위해 생성되는 방식)은 초기 밑줄로 이름을 짓는 것입니다 :'_string'. 필수는 아니지만 ivar 액세스와 속성 호출을 구별하는 데 도움이됩니다. –

답변

6

당신이 말하는 문이 개인 인스턴스 변수 string의 두 가지 다른 선언이라고 가정하면 차이점은 없습니다. 그것들은 사적인 ivar을 선언하는 두 가지 다른 방법입니다. 그것은 선호의 문제입니다. 그냥 하나 골라.

나는 개인적으로 @implementation 블록에있는 것을 사용합니다. 나는 private 속성과 프로토콜에 대한 선언을 선언 할 때만 클래스 확장을 사용한다.

+0

http://stackoverflow.com/questions/2571518/class-variable-defined-at-implementation-rather-than-interface/2571538#2571538 –

+3

@ThilinaHewagama 다른 상황. 이 질문에서 ivar은 중괄호로 선언됩니다. 연결된 질문에서 변수는 중괄호로 묶이지 않습니다. 큰 차이. :) – rmaddy

+0

오, 나는 그것을 알아 차리지 못했다. :) –

0

글쎄, 후자는 .h 파일로 전환하지 않고도 변수를 선언하는 방법 일뿐입니다. 그건 내가 생각할 수있는 쉬운 문제 일뿐입니다.

+0

그것은 쉬운 문제 이상입니다. .h 파일에 개인 선언을 넣을 이유는 없습니다. 개인 구현 세부 사항은 .m 파일에 있어야합니다. 현대 Objective-C의 주요 개선점 중 하나입니다. 더 이상 .h 파일을 개인 ivars, 사유 재산권 및 프로토콜의 비공개 사용으로 오염시킬 필요가 없습니다. – rmaddy

관련 문제