[objective-c] Objective-C에서 방법 옆의 더하기 및 빼기 기호는 무엇을 의미합니까?

Objective-C에서 메소드 정의 옆 의 +-기호 가 무엇을 의미하는지 알고 싶습니다 .

- (void)loadPluginsAtPath:(NSString*)pluginPath errors:(NSArray **)errors;



답변

+클래스 메서드 -를위한 것이고 인스턴스 메서드를위한 것입니다.

예 :

// 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".

클래스와 인스턴스 메소드의 차이점을 다루는 또 다른 질문 이 있습니다 .


답변

클래스 메소드의 경우 (+), 인스턴스 메소드의 경우 (-),

(+) 수업 방법 :-

정적로 선언 된 메소드입니다. 클래스의 인스턴스를 만들지 않고 메서드를 호출 할 수 있습니다. 클래스 메서드는 인스턴스 멤버를 알지 못하기 때문에 클래스 메서드는 클래스 멤버에서만 작동 할 수 있으며 인스턴스 멤버에서는 작동하지 않습니다. 클래스의 인스턴스 메소드는 해당 클래스의 인스턴스에서 호출되지 않는 한 클래스 메소드 내에서 호출 할 수 없습니다.

(-) 인스턴스 메소드 :-

반면에 클래스를 호출하려면 클래스의 인스턴스가 있어야하므로 새 키워드를 사용하여 클래스의 인스턴스를 작성해야합니다. 인스턴스 메소드는 특정 클래스 인스턴스에서 작동합니다. 인스턴스 메소드는 정적으로 선언되지 않았습니다.

만드는 방법?

@interface CustomClass : NSObject

+ (void)classMethod;
- (void)instanceMethod;

@end

사용하는 방법?

[CustomClass classMethod];

CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];


답변

+ 메소드는 클래스 메소드입니다. 즉, 인스턴스 특성에 액세스 할 수없는 메소드입니다. 인스턴스 변수에 액세스 할 필요가없는 클래스의 alloc 또는 helper 메소드와 같은 메소드에 사용됩니다.

-메소드는 인스턴스 메소드-오브젝트의 단일 인스턴스와 관련됩니다. 일반적으로 클래스의 대부분의 메소드에 사용됩니다.

자세한 내용은 언어 사양 을 참조하십시오 .


답변

Apple의 결정적인 설명은 여기 ‘방법 및 메시징’섹션에 있습니다.

https://developer.apple.com/library/mac/referencelibrary/GettingStarted/RoadMapOSX/books/WriteObjective-CCode/WriteObjective-CCode/WriteObjective-CCode.html

간단히 :

+는 ‘클래스 방법’을 의미합니다

클래스의 인스턴스를 인스턴스화하지 않고 메소드를 호출 할 수 있습니다. 그래서 당신은 이것을 다음과 같이 부릅니다.

[className classMethod]; 

– ‘인스턴스 방법’을 의미

먼저 객체를 인스턴스화해야하며 객체에서 메소드를 호출 할 수 있습니다). 다음과 같이 객체를 수동으로 인스턴스화 할 수 있습니다.

SomeClass* myInstance = [[SomeClass alloc] init];

(이것은 본질적으로 객체에 대한 메모리 공간을 할당 한 다음 해당 공간에서 객체를 초기화합니다-지나치게 단순화되었지만 그것에 대해 생각하는 좋은 방법입니다. 객체를 별도로 할당하고 초기화 할 수는 있지만 절대 그렇게하지 마십시오 -포인터와 관련된 불쾌한 문제가 발생할 수 있습니다 및 메모리 관리)

그런 다음 인스턴스 메소드를 호출하십시오.

[myInstance instanceMethod]

Objective C에서 객체의 인스턴스를 얻는 다른 방법은 다음과 같습니다.

NSNumber *myNumber = [NSNumber numberWithInt:123];

이것은 NS 팩토리 클래스 의 ‘numberWithInt’ 클래스 메소드 를 호출합니다 . 이것은 ‘팩토리’메소드입니다 (즉, 객체의 ‘준비된 인스턴스’를 제공하는 메소드).

Objective C는 다음과 같은 문자열의 경우와 같이 특수 구문을 사용하여 특정 객체 인스턴스를 직접 만들 수도 있습니다.

NSString * myStringInstance = @ “abc”;


답변