Cocoa/Objective C에서 정적 클래스 메서드는 스레드로부터 안전합니까? 관련된 커스텀 URL 요청을하기위한 클래스를 정의하고 있는데, 이것은 여러 스레드에서 호출하고 싶습니다. 이 전 클래스가 있다고 가정 해 봅시다 :코코아/목표 C : 메서드 및 스레드 안전
@interface URLConnector : NSObject {
}
+(Response *)getData:(NSString *)category;
+(Response *)put:(NSString *)category content:(NSData *)content;
@end
각 방법은, NSMutableURLRequest 정의를 호출하고, NSRunLoop 사용 runUntilDate를 : 응답을 기다리는. 또한 NSMutableRequests의 콜백을 처리하기 위해 URLConnectorDelegate라는 다른 클래스의 인스턴스를 만들고 반환하기 전에 해제합니다. (참고 :이 코드는 URL 요청을하기 위해 널리 사용되는 공용 라이브러리를 기반으로합니다.)
이 접근 방식에 대해 좋아하는 점은 모든 스레드를 단순하게 유지하고 모든 사용자 지정 서버 관련 코드를 한 곳에서 처리한다는 것입니다. 스레드는 단일 함수 호출로 URL 요청을 실행할 수 있습니다.
모든 스레드가 동시에 이러한 정적 함수를 사용하여 동시 호출을 할 수 있습니까 (즉, 정적 objective-c 메소드는 본래 스레드 안전)?
그래서 로컬 변수에 관한 한이 두 종류의 메소드 모두 스레드로부터 안전합니까? 예를 들어 로컬 변수를 반복 할 경우 (int i = 0; i <20; i ++) - 메서드에서 두 스레드가 동시에 메서드를 실행하는 경우 충돌이 발생합니까? – Colin
@Colin : 스택의 모든 로컬 변수는 스레드 로컬이므로 안전합니다. 따라서 '정적'으로 표시된 변수를 사용하지 않거나 다른 방법으로 메소드의 범위 밖에서 살려두면 안전합니다. – PeyloW