2012-06-28 35 views
3

此代码来自实用程序应用程序,由Apple在创建项目时添加。困惑于自我和授权

这是什么之间的区别:

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

这:

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller 
{ 
    [controller dismissModalViewControllerAnimated:YES]; 
} 

他们都工作,但第一个是从实用的应用程序的主代码,由苹果增加。 那么有什么区别,为什么自我运作? self是MainViewController,而不是FlipsideViewController。我不知道,这与代表团有什么关系? 谢谢。

回答

2

这一切都取决于哪个对象正在执行flipsideViewControllerDidFinish;如果它与controller相同,那么它就是一样的。

实际上,会发生什么情况是,有时委派的类(在您的案例中为FlipsideViewController)也实现了委托协议(即充当委托)。在这种情况下,selfcontroller是相同的。这相当于一个委托intialization等(例如在init方法。)(例如,应用代理,或其他)

self.delegate = self; 

但你可以有你的代表是不同的类,在这种情况下,他们会有所不同。在这种情况下,你会说(在INIT如):

self.delegate = [UIApplication sharedApplication].delegate; 

在这种情况下,你的应用程序代理将收到的呼叫FlipsideViewControllercontroller参数告诉其对象是指;在这种情况下,self!= controller

另一种情况是您的委托人充当多个对象的委托人;在这种情况下,controller参数告诉哪个对象是委托对象。

实际上,在委托方法实现中,您可以放心地使用controller参数,而不需要太多考虑。

+0

谢谢你的documentation,我现在好理解。 – Devfly

2

我知道一个答案已被选定为正确的,塞尔吉奥在解释代表团方面做得很好,但在这个具体案例中,答案要简单得多。在这种情况下,selfcontroller并不是一回事(就像你在问题中所说的那样)。 self是呈现控制器,并且controller是呈现的控制器。所以,这两个电话工作的原因是这样的:

呈现视图控制器负责解除它所呈现的视图控制器 。但是,如果您在所呈现的视图 控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器的 。

从苹果UIViewController

+0

非常感谢! :) – Devfly