2014-01-25 2 views
-1

나는 iOS를 처음 접했고, 튜토리얼이나 교수로부터 배웠다. .h 파일에서
우리는이 :@ 합성하고 자기 자신을 사용하는 것

.m 파일에서
@interface ViewController : UIViewController <UITextFieldDelegate> 

@property (strong, nonatomic) IBOutlet UILabel *myResponse; 
@property (strong, nonatomic) IBOutlet UITextField *myInput; 

@end 

우리가 가진 :

@sysnthesize myResponse 
@synthesize myInput 

내 질문은 이것이다 : 추가 사이의 차이는 .m 파일에서, 무엇 @synthesize 및 그런 다음 [myInput <do something here>]과 같은 속성을 사용하고 @synthesize을 제거하고 [self.myInput <do something here>]을 사용합니다. Xcode 5에서 실행 중이므로 자동 합성 기능을 사용할 수 있음을 이해하고 있지만 두 가지 기능 간에는 더 미묘한 차이점이 있습니까?

교수님이 @synthesize을 사용했으며 다음 튜토리얼은 self.propertyName을 사용하고 있었기 때문에 궁금합니다.

감사합니다.

+0

방금 ​​배우기 시작하면 가장 기본적인 질문은 Apple 설명서를 참조하십시오. https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html –

+3

및 더 이상 @ 합성을 사용하지 마라. –

답변

5

속성에 더 이상 명시 적으로 @synthesize을 사용할 필요가 없습니다. 교수님이 그것을 사용하고 계시다면, 그저 두려운 상황에서 무슨 일이 일어나고 있는지를 보여 주어야합니다.

속성이 .h 파일에 정의되어 있으면 접근 자, 변경자 및 인스턴스 변수가 자동으로 생성됩니다. 명시 적으로 @synthesize의 등록 정보를 사용하는 경우 지시어 다음에 제공되는 모든 ivar 이름을 통해 액세스 할 수 있습니다. @synthesize을 사용하지 않으면 자동 생성 된 ivars는 _somePropertyName을 통해 사용할 수 있습니다.

예에서 @synthesize을 사용하면 myResponse UILabel에 인스턴스 변수 myResponse을 통해 액세스 할 수 있습니다. @synthesize이 없으면 _myResponse을 통해 사용할 수 있습니다. 두 경우 모두 self.myResponse을 통해 사용할 수 있습니다. 모든 라이프 사이클 메소드, 접근 자 또는 변경자 (-viewDidLoad, -viewWillAppear, -setMyResponse: 등)에서 인스턴스 변수를 사용하고 다른 모든 메소드에서 self.propertyName을 사용하여 클래스의 속성을 인스턴스 변수와 명확히 구분하는 것이 가장 좋습니다.

관련 문제