Быстрое делегирование - когда использовать слабый указатель на делегат

Может кто-нибудь объяснить, когда и когда не следует использовать «слабое» назначение для указателя делегата в Swift, и почему?

Насколько я понимаю, если вы используете протокол, который не определен как класс, вы не можете и не хотите назначать свой указатель делегата для слабого.

protocol MyStructProtocol{
    //whatever
}

struct MyStruct {
    var delegate: MyStructProtocol?
}

Тем не менее, когда ваш протокол определен как протокол типа класса, вы хотите установить свой делегат на слабый указатель?

protocol MyClassProtocol:Class{
    //whatever
}

class MyClass {
    weak var delegate: MyClassProtocol?
}

Я прав? В быстром руководстве Apple есть примеры протокола классов, в которых не используются слабые назначения, но в моем тестировании я вижу сильные циклы ссылок, если на моих делегатов нет слабых ссылок.