답변:
+
클래스 메서드 -
를위한 것이고 인스턴스 메서드를위한 것입니다.
예 :
// Not actually Apple's code.
@interface NSArray : NSObject {
}
+ (NSArray *)array;
- (id)objectAtIndex:(NSUInteger)index;
@end
// somewhere else:
id myArray = [NSArray array]; // see how the message is sent to NSArray?
id obj = [myArray objectAtIndex:4]; // here the message is sent to myArray
// Btw, in production code one uses "NSArray *myArray" instead of only "id".
클래스와 인스턴스 메소드의 차이점을 다루는 또 다른 질문 이 있습니다 .
@classmethod
및 @method
도 정도. 왜 그렇게 간결한가 ...?
클래스 메소드의 경우 (+), 인스턴스 메소드의 경우 (-),
(+) 수업 방법 :-
정적로 선언 된 메소드입니다. 클래스의 인스턴스를 만들지 않고 메서드를 호출 할 수 있습니다. 클래스 메서드는 인스턴스 멤버를 알지 못하기 때문에 클래스 메서드는 클래스 멤버에서만 작동 할 수 있으며 인스턴스 멤버에서는 작동하지 않습니다. 클래스의 인스턴스 메소드는 해당 클래스의 인스턴스에서 호출되지 않는 한 클래스 메소드 내에서 호출 할 수 없습니다.
(-) 인스턴스 메소드 :-
반면에 클래스를 호출하려면 클래스의 인스턴스가 있어야하므로 새 키워드를 사용하여 클래스의 인스턴스를 작성해야합니다. 인스턴스 메소드는 특정 클래스 인스턴스에서 작동합니다. 인스턴스 메소드는 정적으로 선언되지 않았습니다.
만드는 방법?
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
사용하는 방법?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
+ 메소드는 클래스 메소드입니다. 즉, 인스턴스 특성에 액세스 할 수없는 메소드입니다. 인스턴스 변수에 액세스 할 필요가없는 클래스의 alloc 또는 helper 메소드와 같은 메소드에 사용됩니다.
-메소드는 인스턴스 메소드-오브젝트의 단일 인스턴스와 관련됩니다. 일반적으로 클래스의 대부분의 메소드에 사용됩니다.
자세한 내용은 언어 사양 을 참조하십시오 .
self
, 대신 클래스가 없습니다. 그것들은 단순히 인스턴스와 관련이 없으며 메소드 조회는 인스턴스가 아니라 클래스를 통해 이루어집니다. 아직도, 당신은 할 수 있습니다+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
Apple의 결정적인 설명은 여기 '방법 및 메시징'섹션에 있습니다.
간단히 :
클래스의 인스턴스를 인스턴스화하지 않고 메소드를 호출 할 수 있습니다. 그래서 당신은 이것을 다음과 같이 부릅니다.
[className classMethod];
먼저 객체를 인스턴스화해야하며 객체에서 메소드를 호출 할 수 있습니다). 다음과 같이 객체를 수동으로 인스턴스화 할 수 있습니다.
SomeClass* myInstance = [[SomeClass alloc] init];
(이것은 본질적으로 객체에 대한 메모리 공간을 할당 한 다음 해당 공간에서 객체를 초기화합니다-지나치게 단순화되었지만 그것에 대해 생각하는 좋은 방법입니다. 객체를 별도로 할당하고 초기화 할 수는 있지만 절대 그렇게하지 마십시오 -포인터와 관련된 불쾌한 문제가 발생할 수 있습니다 및 메모리 관리)
그런 다음 인스턴스 메소드를 호출하십시오.
[myInstance instanceMethod]
Objective C에서 객체의 인스턴스를 얻는 다른 방법은 다음과 같습니다.
NSNumber *myNumber = [NSNumber numberWithInt:123];
이것은 NS 팩토리 클래스 의 'numberWithInt' 클래스 메소드 를 호출합니다 . 이것은 '팩토리'메소드입니다 (즉, 객체의 '준비된 인스턴스'를 제공하는 메소드).
Objective C는 다음과 같은 문자열의 경우와 같이 특수 구문을 사용하여 특정 객체 인스턴스를 직접 만들 수도 있습니다.
NSString * myStringInstance = @ "abc";