Когда вы используете метод initWithRequest: делегат: метод NSURLConnection, данные (вместе с другими вещами) отправляются объекту делегата в последовательности вызовов методов. Все методы являются необязательными, поэтому, если ваш объект-делегат не реализует их, объект соединения просто пропускает их.
Существует множество методов, поэтому я не буду перечислять их все здесь, но они все подробно описаны в документации NSURLConnection. Чтобы получить полученные данные, вы захотите реализовать -connection: didReceiveData: в объекте делегата. Этот метод будет вызван, возможно, более одного раза, с объектом NSData, представляющим вновь полученные данные. Затем вы можете добавить это к существующему объекту NSMutableData или сделать все остальное, что имеет смысл. Вы будете знать, что вы получили все данные, когда -connectionDidFinishLoading: вызывается для объекта делегата.
Чтобы ответить на два ваших конкретных вопроса:
Да, вы должны объявить его как свойство объекта контроллера. Вы также должны убедиться, что выделили объект ДО, вызывая NSURLConnection в initWithRequest: делегат:, потому что соединение начнет загружать данные асинхронно, как только будет создан объект соединения. В качестве альтернативы вы можете реализовать -connection: didReceiveResponse: в делегате, проверить статус HTTP и затем создать объект данных.
Объект изменяемых данных не может найти URL, соединение или его данные в том виде, в котором вы его настроили, но если вы выполните описанные мной шаги, вы можете добавить данные в него как он входит и использует его после завершения соединения.