Ответы пользователя по тегу Objective-C
  • Как runloop указывает потоку спать?

    doublench21
    @doublench21 Куратор тега Swift
    У тебя неправильное понимание.

    По своей сути - поток выполняет свою задачу и умирает. Но это иногда плохо, ибо на создание тратятся ресурсы системы. Эту проблему можно решить несколькими способами... но один из них это RunLoop. RunLoop заставляет поток оставаться живым, даже если никакой задачи на нём не выполняется (Но это не основная его задача. Основная его задача "слушать"). RunLoop стал настолько полезной штукой, что его принудительно привязали к каждому созданному потоку разработчики Apple. По-умолчанию, RunLoop не активирован. То есть для обычных потоков вам даже и знать о нём не нужно. ДА вы даже не будете создавать потоки, ибо в 99% вы работаете с абстракциями DispatchQueue/OperationQueue.

    Итак, когда RunLoop активирован, то он заставляет поток жить всё время, пока активен он сам (Я напомню, что для RunLoop это не основная цель). RunLoop способен принимать какие-либо события, но это не тема этого разговора. Так вот... когда RunLoop видит, что на "поле тишина", он переходит в спящий режим.

    А спящий режим у RunLoop это просто вечный цикл. Не верите? Смотрите:
    #define	CFRUNLOOP_SLEEP() do { } while (0)
    #define	CFRUNLOOP_SLEEP_ENABLED() (0)
    Ответ написан
    8 комментариев
  • Как решить лимит с запланированными оповещениями?

    doublench21
    @doublench21 Куратор тега Swift
    А кто Вам мешает поставить задачу в бэкграунд и запрашивать даты каждый день в 00:00 скажем и добавлять оповещение? Или скажем запрашивать новые даты с более длительным периодом. Никто же Вас не заставляет в один день устанавливать 200 оповещений. Получайте новые даты и устанавливайте их по мере необходимости. В приложение для этого заходить не нужно.

    Второй вариант использовать EventKit(Календарь, Напоминания). Там вообще лимитов нет.
    Ответ написан
    2 комментария
  • Что такое CFRunLoop в iOS в библиотеке CoreFoundation?

    doublench21
    @doublench21 Куратор тега Swift
    Серьезно?
    https://developer.apple.com/documentation/corefoun...
    https://developer.apple.com/library/archive/docume...

    Если просто, это то, что отличает обычное приложение от приложения командной строки. CFRunLoop - это очередь, которая бегает по всему, что внутри неё в бесконечном цикле, до тех пор, пока какой-то из её компонентов в очереди не подаст сигнал. После обработки повторяет эти действия вплоть до закрытия приложения.
    A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events. The purpose of a run loop is to keep your thread busy when there is work to do and put your thread to sleep when there is none.
    Ответ написан
    Комментировать
  • Актуальность swift?

    doublench21
    @doublench21 Куратор тега Swift
    Swift достаточно молодой язык, но при этом он очень активно развивается. Достаточно глянуть на Github репозиторий Apple и посмотреть, то огромное количество работы, которые они делают вокруг и внутри этого языка.

    Достаточно ли знать 1 лишь swift для успешной деятельности, либо в серьезных задачах неумолимо сталкиваешься с необходимостью писать на obj-c?
    - одного лишь Swift Вам хватит сполна. Необходимости писать на Objective-C нет абсолютно никакой и с каждым днём её становится всё меньше и меньше.

    Справедливо ли утверждение "не пишешь на obj-c - не мужик"?
    - тех кто пишет исключительно на Objective-C и говорит так, как вы написали, можно смело называть - луддитами.

    Как на подобных "программистов" смотрят работодатели и есть ли вообще перспективы развиваться в этом направлении, хотя бы в качестве хобби?
    - странный вопрос... На программистов под iOS смотрят лучше, чем на web-разработчиков(холивар). Или вы имеете ввиду именно программистов на Swift? Ну тогда такой вопрос не имеет смысла, читайте выше :)
    Ответ написан
    3 комментария
  • Как сделать collectionView в tableView?

    doublench21
    @doublench21 Куратор тега Swift
    Не понял Вас. Ну есть у вас tableviewcell.xib и сопутствующий ему условный UITableViewCell.swift. В нём находится UICollectionView. Теперь делаете IBOutlet UICollectionView в файле UITableViewCell.swift. Ну и есть у вас также collectionviewcell.xib и сопутствующий ему условный UICollectionViewCell.swift. И допустим один контроллер UIViewController.swift. У вас очевидно есть доступ и к UITableView и UICollectionView. Теперь достаточно в этом контроллере указать его самого в качестве делегата для обеих коллекций. Вот и всё.

    UITableView есть уже как IBOutlet в вашем контроллере.
    А IBOutlet UICollectionView есть в классе UITableViewCell.

    Поправьте, если что не понял.
    Ответ написан
    1 комментарий
  • Как в ios слушать смену сети?

    doublench21
    @doublench21 Куратор тега Swift
    Слава богу в iOS такого делать нельзя!
    Вот здесь пишется, что можно делать в background:
    Declaring Your App’s Supported Background Tasks
    https://developer.apple.com/library/content/docume...
    Ответ написан
    Комментировать