(обновление Swift 4) Чтобы ответить на исходный вопрос напрямую, вот быстрый эквивалент опубликованного фрагмента Objective-C.
let url = URL(string: image.url)
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
imageView.image = UIImage(data: data!)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ:
важно отметить, что метод Data(contentsOf:)
будет загружать содержимое URL синхронно в том же потоке, который выполняется кодом, поэтому не вызывайте его в основном потоке вашего приложения.
Простым способом для того, чтобы один и тот же код выполнялся асинхронно, а не для блокировки пользовательского интерфейса, - это использование GCD:
let url = URL(string: image.url)
DispatchQueue.global().async {
let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
DispatchQueue.main.async {
imageView.image = UIImage(data: data!)
}
}
При этом в реальных приложениях, если вы хотите иметь лучший пользовательский интерфейс и избегать нескольких загрузок то же изображение, вы можете захотеть также, чтобы они не только загружались, но и кэшировались. Там уже довольно много библиотек, которые делают это очень бесшовно, и все они очень просты в использовании. Я лично рекомендую Kingfisher :
import Kingfisher
let url = URL(string: "url_of_your_image")
// this downloads the image asynchronously if it's not cached yet
imageView.kf.setImage(with: url)
И это все
Когда Вы захотите видеть исходные имена файлов и номера строки в Вашем stacktraces, генерируйте PDBs использование pdb-единственной опции. Оптимизация является отдельной от поколения PDB, т.е. можно оптимизировать , и генерируют PDBs без хита производительности.
, Если Вы используете/debug:full, знать, что существует некоторое влияние на скорость и размер оптимизированного кода JIT и маленькое влияние на качество кода с/debug:full. Мы рекомендуем/debug:pdbonly или никакой PDB для генерации кода выпуска.
Для ответа на первый вопрос только необходимо включать PDBs для производственного выпуска при необходимости в номерах строки для отчетов об исключении.
Для ответа на второй вопрос, с помощью флага "Optimise" с PDBs означает, что любой стек "коллапс" будет отражен в отслеживании стека . Я не уверен, может ли фактический номер строки, о котором сообщают, быть неправильным - этому нужно больше расследования.
Для ответа на третий вопрос у Вас может быть лучший из обоих миров с довольно аккуратным приемом. Существенные различия между отладочной сборкой по умолчанию и сборкой конечных версий по умолчанию - то, что при выполнении сборки конечных версий по умолчанию, оптимизация включена, и отладочные символы не испускаются. Так, на четырех шагах:
Изменение Ваша конфигурация выпуска для испускания отладочных символов. Это не имеет фактически никакого эффекта на производительность Вашего приложения и очень полезно если (когда?) необходимо отладить сборку конечных версий приложения.
Компиляция с помощью новой конфигурации сборки конечных версий, т.е. с отладочные символы и с оптимизация. Обратите внимание, что 99% оптимизации кода сделаны JIT-компилятором, не языковым компилятором.
Создают текстовый файл в папке Вашего приложения под названием xxxx.exe.ini (или dll или безотносительно), где xxxx является названием Вашего исполняемого файла. Этот текстовый файл должен первоначально быть похожим:
[.NET Framework Debugging Control]
GenerateTrackingInfo=0
AllowOptimize=1
С этими настройками, Вашим выполнением приложения в полной скорости. Когда Вы захотите отладить свое приложение путем включения отслеживания отладки и возможно выключения (CIL) оптимизация кода, просто используйте следующие настройки:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
РЕДАКТИРОВАНИЕ Согласно комментарию cateye, это может также работать в размещенной среде , такой как ASP.NET.
Нет никакой потребности включать их в Ваше распределение, но необходимо определенно создавать их и сохранять их. Иначе отладка дампа катастрофического отказа практически невозможна.
я также включил бы оптимизацию. Пока это действительно делает отладку более трудной, увеличение производительности обычно очень нетривиально в зависимости от природы приложения. Мы легко видим по 10x производительность на выпуске по сравнению со сборками отладки для некоторых алгоритмов.