2012-05-08 2 views
2

Objective-C에서 많은 것들이 무엇인지 추측했습니다. 데이터 유형에 대해 간단히 이야기하는 여러 가지 자습서를 살펴 보았습니다. 그러나 구문을 간단하게 설명하는 것은 아닙니다.비동기임을 나타내는이 메소드 이름에 대해 뭔가가 있습니까?

우선 무엇을 의미합니까?

- (void)apiCall:(void (^)(NSMutableArray *list))block { 

그 기능 헤더에 뭔가가 비동기 말해 않는다 : 그것이 무엇을하는 스레드를 시작하고 데이터를 서버에서 반환받을입니까? 그것은 무엇입니까 block 의미는 무엇입니까?

+5

이것은 세 가지 질문입니다. 두 번째 두 가지는 이미 여러 번 답변되었습니다 : [ObjC에서 + 기호가 의미하는 것은 +는 무엇입니까?] (ObjC에서 캐럿의 의미는 무엇입니까?) (http : //www.opensoverflow.com/questions/2097294/) /stackoverflow.com/questions/1912023/) –

+0

첫 번째 질문은 사실 꽤 재미 있습니다. 또한, 이것은 [The Objective-C Programming Language] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/)와 같은 언어 사양에 가깝습니다. (메소드 이름과'^'의 앞에'+'와'-'의 의미에 대한 설명이 있습니다.) –

답변

4
  1. 아니요, 블록이 비동기 적이라는 의미는 아닙니다. Obj-C의 블록은 메소드의 인수로 전달할 수있는 코드 일뿐입니다.
  2. -로 시작하는 메소드는 인스턴스 메소드이고 +로 시작하는 메소드는 클래스 메소드입니다.
  3. ^는 블록을 나타내는 구문 표식입니다.
2

이의이 두 번째 총알 시작하자 : 클래스 메소드가 +로 선언, 인스턴스 메소드는 -으로 선언됩니다.

첫 번째와 세 번째는 관련이 있습니다. block이라는 매개 변수는 코드 블록이며 나중에 실행되도록 의도 된 코드 조각입니다. 이 메서드의 이름이 apiCall이라면,이 메서드는 호출이 완료된 후에 실행되는 것이 좋습니다.

이 메서드는 다른 스레드에서 일부 작업을 수행 한 다음 사용자가 제공 한 블록을 호출하는 것이 자연 스럽지만 당연히 설명서 나 코드를 확인해야합니다.

서명 : (void (^)(NSMutableArray* list)) block은 void 반환 형식 및 NSMutableArray* list을 매개 변수로 사용하는 코드 블록을 설명합니다.

블록 매개 변수의 사용 예는 다음과 같습니다 API를 인스턴스가 그것을 할 생각되어 어떤 일을 수행

void (^apiCallCallback)(NSMutableArray*) = ^(NSMutableArray* list) { 
    NSLog(@"The API returned %d items in a list", [list length]); 
} 

[someApiInstance apiCall:apiCallCallback]; 

후에는 로그 문이 인쇄 된 것을 볼 수 있습니다.

+1

[그들은 정적 메소드가 아니며 클래스 메소드입니다] (http : // stackoverflow .com/questions/8089186/objective-c-difference-class-method-and-static-method/8089623 # 8089623). –

+0

다음 클래스 메서드는 다음과 같습니다 :) –

관련 문제