나는 내 응용 프로그램을 시작할 때 내가 JSON 텍스트에 일부 핵심 데이터 요소 변환 서버로 전송하는 방법 전화NSLog는 문자열이 너무 클 경우 주 스레드 (?)에서 주 스레드를 실행합니까?
applicationDidFinishLaunching
에, 그래서 서버에 일부 왼쪽 통해 데이터를 전송해야합니다. 때로는 응용 프로그램 충돌로 인해 :
xxxxxx는 시간에 시작하는 데 실패
내 첫번째 생각은 메인 스레드가, 나는이 수도를 실현하는 블록 앱이 출시 될 때 나는 일을하고 있다는 것입니다 NSURLConnection을 사용하여 NSURLConnection을 사용하여 비동기 데이터를 보내고 주 스레드를 차단해서는 안되며, 데이터가 크면 연결이 비동기이므로 응용 프로그램이 충돌하기 쉽습니다. 유일한 의심스러운 코드는 코어 데이터 엔티티에서 JSON 텍스트를 만들 때 NSLog를 사용하여 인쇄하고 하드 코딩 된 큰 json 파일을 사용하려고했습니다. NSLog lin을 주석 처리하면 항상 충돌합니다. e, 충돌하지 않습니다. 시나리오를 바탕으로
, 내가 궁금해 : 나는 그렇게 생각- , NSLog는 관계없이 스레드가 호출 될 때의 주 스레드에서 실행? 그 때 나는 애플의 문서에서 발견 : NSLogv에서
출력이 과정에서 그 단 하나 개의 스레드에서, 직렬화 한 번에 위에서 설명한 쓰기/로깅을 수행 할 수 있습니다. 다음 스레드가 메시지를 쓰거나 기록하기위한 모든 시도는 다음 스레드가 완료되기 전에 완료 될 수 있습니다.
심지어 기본 스레드가 아닌 것을 의미하지만 기본 스레드로 연결되는 일부 긴 문자열은 로깅됩니다.
- NSLog의 문자열 크기에 대한 제한 (이론적, 실용적인)이 있습니까? 하드 코딩 된 JSON 파일은 150KB입니다.
감사합니다.
인스트루먼트는 어떤 말을 했습니까? –
이것을 재현하여 디버그 모드를 실행하면 Xcode가 멈추고 커서가 무지개 회 전자로 바뀌고 Xcode를 강제 실행해야합니다. – hzxu
150KB를 기록하려고하는 이유는 무엇입니까? 그것은 완전히 불합리합니다. –