동일한 클래스 내의 다른 메서드에서 클래스 메서드를 호출 할 수있는 방법이 있습니까? 예를 들어해당 클래스 내에서 클래스 메서드 호출
: 그 작동하지 않는 경우
[MyClass classMethodA];
, 당신은 클래스의 인터페이스에 정의 된 메소드 서명이 있는지 확인 :
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
동일한 클래스 내의 다른 메서드에서 클래스 메서드를 호출 할 수있는 방법이 있습니까? 예를 들어해당 클래스 내에서 클래스 메서드 호출
: 그 작동하지 않는 경우
[MyClass classMethodA];
, 당신은 클래스의 인터페이스에 정의 된 메소드 서명이 있는지 확인 :
+classMethodA{
}
+classMethodB{
//I would like to call classMethodA here
}
는 다음과 같이 간단 할 것이다. (일반적으로 .h 파일에 있음)
확실히.
사용자가 정의한 이러한 방법을 말해 다음과 같이@interface MDPerson : NSObject {
NSString *firstName;
NSString *lastName;
}
+ (id)person;
+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast;
- (id)initWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast;
@property (copy) NSString *firstName;
@property (copy) NSString *lastName;
@end
첫 번째 2 개 클래스 메소드가 구현 될 수있다 : 클래스 메소드에서
+ (id)person {
return [[self class] personWithFirstName:@"John" lastName:@"Doe"];
}
+ (id)personWithFirstName:(NSString *)aFirst lastName:(NSString *)aLast {
return [[[[self class] alloc] initWithFirstName:aFirst lastName:aLast]
autorelease];
}
, self
클래스는 메세지가되기 말합니다. 어떤 클래스도 가정하면 메시징 것을
- (void)instanceMethodB
{
// ...
[[self class] classMethodA];
// ...
}
주 : 인스턴스 메소드 (예를 들어 instanceMethodB), 사용 내에서
+ (void)classMethodB
{
// ...
[self classMethodA];
// ...
}
: 그래서 다른 클래스 메소드 내에서 사용 (classMethodB 말). 실제 클래스는 서브 클래스 일 수 있습니다.
용어를 바꿨습니다. 인스턴스 메소드의 경우 [self foo], 클래스 메소드의 경우에는 [MyClass bar]. –
아니요. '자기'의 의미는 당신이 전하는 메시지에 달려 있습니다. 클래스에 메시지를 보내면 'self'가 클래스입니다. 인스턴스에 메시지를 보내면 'self'가 인스턴스가됩니다. 나는 클래스 메쏘드에 대한 메시징의 중요성을 http://qualitycoding.org/factory-method/ –
에서 설명합니다. 귀하의 의견에 당신이 말한 것은 사실이지만 답변의 용어는 말 그대로 거꾸로입니다. 인스턴스 메소드에서'[self class]'를 사용하는 것은별로 의미가 없지만, 클래스 메소드에서는 완전한 의미를 갖습니다. 인스턴스 메소드는'-'로 시작하고, 클래스 메소드는'+'로 시작하고, 객체의 인스턴스를 참조하기 위해'self'를 사용하는 것은 구문상의 의미를 가지고 있지만 객체의 인스턴스를 참조하기 위해'[self class]'를 사용한다는 것을 기억하십시오 구문 론적으로 말이되지 않습니다. '[self class]'는 클래스를 설명하는 객체에 대한 참조를 의미하며 클래스의 인스턴스는 의미하지 않습니다. –
대칭 C에서 'self'는 동일한 클래스 내의 다른 메소드를 호출하는 데 사용됩니다.
그래서 당신은 우리가 방법으로 메시지를 보내는 방법을 말한다 첫째
+classMethodB{
[self classMethodA];
}
'self'는 인스턴스 메서드에만 적합하지만 질문은 그가 말하고 있음을 나타냅니다. 클래스 메소드 (메소드 이름 앞에'+'기호가 붙음) –
를 작성해야? 방법을 호출하는 방법 아닌가요? 이것은 obj-c에서 말하는 방법입니다. – doNotCheckMyBlog
시도해 보셨습니까? 어떻게 된 거예요? –
@Craftero 개체에 메시지를 보내는 것을 의미하지 않습니까? 메시지는 메소드로 전송되지 않습니다. –