【问题标题】:Passing delegates from singleton?从单例中传递代表?
【发布时间】:2013-03-17 13:53:49
【问题描述】:

在这里的好人的帮助下,我能够写一个单例,但不能从中获得代表。

一开始我有一个socketConnector 类,从Home 类中,我创建了他的一个实例,并且还从他那里得到了一个代表:

       socketInstance=[[SocketConnector alloc]init]; //in Home class
        socketInstance.delegate=self;

我需要为他创建一个单例,并且仍然将代表从他那里得到Home

所以我创建了一个单例类名:sharedConnector,其中我有:

+(sharedConnector*)defaultConnector
{
    static  sharedConnector   *myConnector ;
    @synchronized(self)
    {
        if( myConnector==nil  )
            myConnector=[[sharedConnector alloc]init ];
        return myConnector;
    }   
}

    - (id)init
    {
        if (self = [super init])
        {
            connector=[[SocketConnector alloc]init]; //setting here the socketClass
        }
        return self;
    }

如你所见,我在这里设置了一次套接字类,而不是从Home 类中使用它:

    [sharedConnector defaultConnector].connector.delegate=self; //setting delegates to home!

(连接器在单例上有一个属性) 它确实有效,但我不再让代表回家了。 (所有的代表函数仍然在 Home 类中,因为它们在开始时所在的位置)

【问题讨论】:

  • 你想从 Singleton 调用委托方法吗?
  • 我想使用单例将代表带到 Home 类,正如我所展示的那样,我试图将连接器实例的委托从单例添加到 home 类..
  • 如果是单例,init方法不会被调用,当你使用这些代码时:[sharedConnector defaultConnector].connector.delegate=self;你什么时候调用了单例类的init方法?
  • @junkor 它被调用。 [sharedConnector defaultConnector] 调用 sharedConnector 上的 init 方法,然后调用连接器对象的 init 方法

标签: objective-c


【解决方案1】:

您正在直接访问connection,这与self.connection(使用合成方法)不同。

所以改变:

connector=[[SocketConnector alloc]init]; 

self.connector=[[SocketConnector alloc]init]; 

为什么here有一个很好的解释

【讨论】:

  • 它会做委托调用@giorashc
  • ohhh 太棒了@Rant 你在哪里?有什么见解吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多