2015-01-05 7 views
-1

저는 Objective-C를 처음 접했고 유효한 Objective-C 코드의 구문을 이해하기가 어렵습니다. 예를 들어, 모든 객체는 일반적으로 MyClass * myObject = [[MyClass alloc] init]을 사용하여 할당되고 초기화됩니다. 통사론. 그러나 아래 예제에서 메서드는 해당 클래스의 초기화 된 개체를 만들기 전에 "NSKeyedArchiver"클래스에서 호출됩니다. 같은 상황이 코드의 다음 줄에서 발생합니다.이 경우 메서드는 할당 된/초기화 된 객체를 만들지 않고 "NSUserDefaults"에서 호출됩니다. 이것이 어떻게 가능한지?Objective C - 객체를 할당하고 초기화하지 않고 클래스 메소드를 호출하는 방법

NSData *bandObjectData = [NSKeyedArchiver archivedDataWithRootObject:self.bandObject]; 
[[NSUserDefaults standardUserDefaults] setObject:bandObjectData forKey:bandObjectKey]; 

감사!

+0

'[ClassName theClassMethodName]'은 어떻게 수행 되었습니까? Java의 정적 메서드와 같습니다. –

답변

1

이러한 클래스를 클래스 메소드라고하며 실제 클래스 인스턴스에 의존하지 않으므로 클래스 인스턴스를 수행 할 필요가 없습니다. 메소드 앞에 + 기호 (기호가 아닌)를 붙이면 실제로 만들 수 있습니다.

우리는 일반적으로 클래스의 인스턴스에 의존하지 않을 때 클래스 메소드를 사용합니다. 그래서 당신의 예제에서, NSKeyedArchiver 클래스는 데이터를 보관하기 위해 자신의 인스턴스를 생성 할 필요가 없습니다. 마찬가지로 NSUserDefaults 객체를 만들지 않고도 표준 NSUserDefaults를 얻을 수 있습니다.

다른 유형의 메서드 (인스턴스 메서드)는 개체 자체의 상태를 변경해야 할 때 사용됩니다.

+0

고맙습니다! 정말 감사합니다. –

+1

첫 번째 문장은 약간 정확하지 않습니다. 즉, 클래스 자체가 실제로 객체입니다. –

+0

좋은 지적. 이 문제를 해결하기 위해 내 대답을 수정했습니다. –