2012-04-01 3 views
0

У меня есть класс, который является одноэлементным. Этот singleton создается с использованием GCD (через макрос, который использует блок), и к нему обращаются другие объекты с помощью метода класса. Проблема в том, что мне нужно, чтобы этот синглтон был делегатом другого объекта. Где (когда) я могу установить это, у меня нет доступа к init, но мне нужно установить его в ближайшее время, когда создается экземпляр singleton.Как настроить одноэлементный класс в качестве делегата?

+0

Я не понимаю, как это отличается от установки любого другого делегата - просто установите 'delegate' свойство вашего другого объекта, чтобы быть одноплодными после ее создания ... – omz

+0

Я не создаю одиночки object..it создается GrandCentralDispatch, когда он не существует и когда к нему обращаются некоторые другие объекты. Более одного объекта имеет доступ к этому синглтону, и я не знаю, когда. Я имею в виду, нельзя точно сказать, что тот или иной будет первым. Кроме того, я не думаю, что это хорошая идея, чтобы этот синглтон был делегатом снова и снова, каждый раз, когда какой-то объект обращается к нему. Вы уверены, что понимаете этот вопрос? –

+5

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

ответ

1

Нормальное поведение для одноэлементного режима состоит в том, что, если ему нужен внутренний экземпляр, он создает один первый время, на которое он ссылается. (Я думаю, это то, что вы говорите, но это не явное). Если это так, то кажется, что объект, который должен иметь его как делегат, должен просто присваивать ему всякий раз, когда создается объект. Поэтому часть инициализации создания другого объекта будет: self.delegate = [MySingleton sharedInstance];

Я не уверен, что это важно, но есть причина, что делает его делегат вместо того, чтобы просто использовать его всякий раз, когда объект должен, через что-то вроде : [[MySingleton sharedInstance] doSomething];?

+0

Это невозможно. Делегатором здесь является встроенный класс Cocoa touch framework от Apple. Я также никогда не видел такой практики, до сих пор я всегда видел, как делегат ставит себя перед делегатом. Иными словами, инициатива быть делегатом всегда исходила от делегата. –

+0

Если это невозможно в этом случае, это нормально, но существуют различные другие используемые шаблоны, например, объект, делающий второй объект делегатом третьего. Одна из причин, по которой вы редко видите, что объект задает свой собственный делегат, - это то, что я сказал в моем втором абзаце: если объект может найти его сам по себе (например, одноэлементный), вся идея делегации теряет свою цель. –

1
  1. создать класс реализует делегат

  2. затем в методе обратного вызова

    [[NSNotificationCenter defaultCenter] postNotification:your-notification]; 
    
  3. затем в реальном

    implements viewController [center addObserver:self selector:@selector(your-delegate-mothed:) name:your-name object:nil]; 
    
  4. наконец:

    -(void)your-delegate-mothed:xx 
    { 
        //by NSNodificationCenter as gloal delegate ,dispatch callback 
    } 
    
Смежные вопросы