Я следовал этому руководству http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server. и у меня все работает нормально, но есть одна строка в тексте, которую я не понимаю:
Наши потоки должны быть постоянно готовы к отправке или получению данных. Чтобы включить это, мы должны запланировать поток для получения событий в цикле выполнения. Если мы не назначим цикл выполнения, делегат заблокирует выполнение нашего кода до тех пор, пока в потоке не будет данных для чтения или записи, чего мы хотим избежать.
Но если я прокомментирую строки в коде:
//[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
//[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
все по-прежнему будет работать нормально. Я действительно не понимаю, почему я должен планировать это в основном цикле выполнения?
Как я вижу, все, что происходит в основном потоке, обрабатывается в этом цикле выполнения. Поэтому, если я нажму кнопку, она будет обработана в основном цикле выполнения. Здесь, если я не планирую это в основном цикле выполнения, байты все еще получаются и отправляются, поэтому для меня это означает, что они обрабатываются в основном цикле выполнения.