이 대 종류는 ... 내 클래스 중 하나 내 구현 파일에있는 것입니다 이 카테고리가 작동하는 이유는 무엇입니까? 클래스 확장
이 코드와 1@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
- (void)viewDidLoad
{
NSString *myString = [self myPrivateMethod];
NSLog(@"%@", myString);
}
- (NSString *)myPrivateMethod
{
return @"someString";
}
@end
코드 설정 번호, 모든 작동하고 "someString를 기록 ".
내 코드가 어떻게 든 다르게 보일 까? 실제로 실수로 해당 카테고리를 사용하고 있습니다 (복사/붙여 넣기를하고 "PrivateMethods"가 있음을 알지 못했지만 클래스 확장을 사용하려고했습니다).
코드 설정 # 2
@interface MyViewController()
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
....
또는 :
내 코드는 실제로 다음 중 하나를 같이하지 않겠
코드 설정 # 3
@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController (PrivateMethods)
....
무엇 이 상황에서 무슨 일이 일어나고 있는지에 대한 뉘앙스가 무엇입니까? 코드 설정 # 1과 코드 설정 # 2의 차이점은 무엇입니까?
편집 :이 달성처럼 설정 무엇을 설정 # 3
에 대한 질문? 심지어 이것이 "효과가 있습니까"?
@interface MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod;
@end
@implementation MyViewController
- (void)viewDidLoad
{
NSString *myString = [self myPrivateMethod];
NSLog(@"%@", myString);
}
@end
@implementation MyViewController (PrivateMethods)
- (NSString *)myPrivateMethod
{
return @"someString";
}
@end
설치 # 3에 대한 다른 질문으로 내 질문을 업데이트합니다. 지금까지 고마워! – MikeS
이 경우에 (최근의) Clang은 달리 선언되지 않은 메소드의 정의를 동일한 '@ 구현'에 대한 선언으로 간주한다는 점 또한 중요하다고 생각합니다. –
나는 조쉬를 "잘 알고있다". 그래도 새로운 Xcode를 사용하고 있든 없습니까? – MikeS