광어네 맛집
[Objective C] self & _ 비교 본문
728x90
반응형
이제 날씨도 더워지고 봄은 어디갔나 ㅜㅜ
오늘은 self와 _를 비교하고자 함!
바로 알아봅시다!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/014.gif)
'self' 는 setter & getter 속성을 통해 액세스함!
'_'는 직접 액세스 함! ( 즉, setter & getter를 거치지 않음 )
이걸 몰랐을 때는 둘 다 같은 개념인줄;
다음 예시를 봅시다
다음과 같이 헤더 파일을 설정해주고
메인 파일에서는 받은 값을 setter를 통해서 입력해줍니다!
//Header file
@property (nonatomic, strong) NSString *tesNaming;
//Main file
- (void)setTestNaming:(NSString *)testNaming {
self.testNaming = testNaming;
}
여기까지는 문제 없음!
근데 사용할 때가 문제임;
위에서 구현한 함수를 다음과 같이 사용하면 에러남
// viewDidLoad 내부
[self setTestNaming:@"물개"];
왜냐면 self내부에서 self를 받으니까 무한 반복이 됨
한참 뒤에 에러가 어떻게 뜨냐면 ㅋㅋㅋㅋㅋㅋ
그래서 우리는 외부에서 받을 때 self를 쓰면 안됨
아래처럼 써야함
//Main file
- (void)setTestNaming:(NSString *)testNaming {
_testNaming = testNaming;
}
그럼 self는 쓰지마?
이건 또 아님!
때에 따라 다른데
// ViewDidLoad 내부
[self underBarInputNaming:@"고양이"];
[self selfInputNaming:@"강아지"];
NSLog(@"%@는 외부에서 입력한 값", self.testNaming);
NSLog(@"%@는 외부에서 입력한 값", _testNaming);
// Function 구현
- (void)selfInputNaming:(NSString *)name {
NSLog(@"입력한 이전 값은 %@입니다 테스트 중!", self.testNaming);
self.testNaming = name;
NSLog(@"입력한 이후 값은 %@입니다 테스트 중!", self.testNaming);
NSLog(@"입력한 값은 %@입니다 테스트 중!", name);
}
- (void)underBarInputNaming:(NSString *)name {
NSLog(@"입력한 이전 값은 %@입니다 테스트 중!", _testNaming);
_testNaming = name;
NSLog(@"입력한 이후 값은 %@입니다 테스트 중!", _testNaming);
NSLog(@"입력한 값은 %@입니다 테스트 중!", name);
}
결과는 잘 동작함!
마지막으로 정상적인 코드와 결과는 아래와 같음!
// ViewDidLoad 내부
[self setTestNaming:@"물개"];
// Function
- (void)setTestNaming:(NSString *)testNaming {
_testNaming = testNaming;
}
너무 많이 프린트했나;
성격 상 이것도 궁금하고 저것도 궁금해서 한번 다 프린트 해봄!
그럼 오늘도 화이팅!
728x90
반응형
'Objective-C [레거시 뿌수기!] > Objective-C' 카테고리의 다른 글
[Swift Library] Obective C에서 Swift Library 사용하기 (0) | 2022.06.21 |
---|---|
[Objective-C] Dictionary 다루기 (0) | 2022.04.25 |
[Objective C]UIButton BackgroundColor (0) | 2022.04.21 |
[Objective - C] #define 이란? (0) | 2022.04.11 |
[objective - C] 반복문 (0) | 2022.04.07 |