Обновить
39
Maxim Firsov@FirsofMaxim

Mobile developer, Golang backend developer

Отправить сообщение
Если ссылка на очередь нигде не сохраняется, то конечно утечки нет, но все меняется если пробовать вызвать код в main очереди, например (Swift3):

Запустите в Playground этот код:

class A {
    init(){
        print("A init")
    }
    
    deinit {
        print("A deinit")
    }
    
    public func fooBar(){
        print("A.fooBar")
    }
    
    public func fooBarAsync(){
        print("A.fooBarAsync")
        DispatchQueue.main.async {
            self.fooBar()
        }
        
    }
}


func testCase(){
    let a = A()
    a.fooBar()
    a.fooBarAsync()
}


testCase()

##########
A init
A.fooBar
A.fooBarAsync
Ухты! Где deinit растак его?!

Делаем так:
public func fooBarAsync(){
        print("A.fooBarAsync")
        DispatchQueue.main.async { [ unowned self] in 
            self.fooBar()
        }
        
    }

##########
A init
A.fooBar
A.fooBarAsync
A deinit
Оуе детка! Я тебя вижу :)

а вот и утечка если:
1) замыкание
2) внутри self
3) self не указан как weak/unowned
Немного хелпа тут

self связывается как strong ссылка если не указано иное.
В Swift для замыканий ввели типы аргументов — weak/unowned, внутри при доступе к вызываемому контексту требуется написать self, тем самым среда как бы говорит — «ага! self написал — утечку осознал!» (здесь я имею ввиду что если в замыкании используется self без типа аргумента weak/unowned — привет утечка)
Спасибо! Здесь реализован похожий фукнционал на extensions, на мой взгляд это удобнее.
Отдельные сторибоардс — https://habrahabr.ru/post/312766/
Спасибо, подход интересный, я обычно просто веду конспект (вещи которые новые), либо на полях пометки делаю карандашом.
На пикабушке есть замечательный пост по теме — http://pikabu.ru/story/igrovaya_pristavka_svoimi_rukami_4546616
Влезать в высоковольтную сеть (не путать с бытовой) — дорогое удовольствие (лицензия, специфичное оборудование), дешевле просто использовать вышки.
Конечно есть :) иначе я бы не был фрилансером.
Для меня есть несколько «тревожных» звоночков при работе в удаленной команде:
— ежедневные созвоны (meetup'ы), если их длительность в среднем больше часа, это значит надо искать другое место (мне тяжело общаться без возможности вернуться и перечитать, переосмыслить текст, поэтому мой выбор — email);
— молниеносная смена приоритетов и задач, вчера пилил формочку — эй бросай все, сегодня надо работать с этим сервисом;
— отсутствие документации на разрабатываемый продукт (API, пользовательская инструкция, соглашения по форматированию кода и т/д).
Надеюсь проголосовали за Коммуникативность?
Для iOS:
— Чтобы импортировать DESK из поста, заходим в https://api.ankiapp.com/nexus/ (логин такой же как AnkiAPP), указываем файл, ждем окончания импорта (вышлют на email). После этого набор появляется в Desks->Remote.
Спасибо, идеи хорошие! Можно еще добавить статический конструктор для сервиса (в «chain» стиле), в котором можно указать внешние модули: парсер данных, низкоуровневая сетевая библиотека, обработчик ошибок, логгер и т/д — как вишенка на торт.
А как продлить длительность видео (последний кадр виден в конце)?
Извините, а есть подобное описание структуры архива, но для PPTX (PowerPoint)? Стоит задача вытащить с каждого слайда текст и картинки, для перевода во внутренний редактор программы.
Спасибо!
Спасибо за подборку! Может подскажете есть ли подкасты по iOS разработке на русском?
Дайте ссылки на первые уроки, пожалуйста!
Спасибо за Swift материалы!
Прекрасно, а ресурс хода (по времени, средняя нагрузка) сколько получается?
IDEA прекрасна, для малых проектов использую FlashDevelop.

Информация

В рейтинге
5 301-й
Откуда
Снежинск (Челябинская обл.), Челябинская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Бэкенд разработчик, Разработчик мобильных приложений
Старший
Android SDK
Kotlin
Java
Golang
PostgreSQL
Swift
Разработка под iOS
Разработка под Android