iphone – 代理和通知有什么区别?

iphone – 代理和通知有什么区别?,第1张

概述代表和通知有什么区别? 我理解为代表和协议, @protocol classADelegate-(void)DelegateMethod;@endclassB <classADelegate>{ classA *ObjOfclassA=[[classA alloc]init]; ObjOfclassA.delegate=self;//while push l 代表和通知有什么区别?

我理解为代表和协议,

@protocol classADelegate-(voID)DelegateMethod;@endclassB <classADelegate>{   classA *ObjOfclassA=[[classA alloc]init];    ObjOfclassA.delegate=self;//while push later,here we have taken the pointer of classB(self) to classA and stored in delegate variable of classA. so from classA we can call the function in classB   push:classA from here.   -(voID)DelegateMethod{        nslog(@"i am rithik from India");     }}classA{   ID <classADelegate> delegate;   -(voID)vIEwdIDload{        [self.delegate DelegateMethod];    }}

我的怀疑是

1为什么我们不像这样在classA中使用

classA{**classB** <classADelegate> delegate;[self.delegate DelegateMethod];}

使用“ID”的原因是什么,它们有什么区别?

2我们调用了来自协议定义的classB的DelegateMethod函数的方法。

相反,我们可以通过定义classB的实例方法直接调用该方法,因为我们在classA的委托变量中获得了classB的指针。

喜欢这个。

classB{-(voID)DelegateMethod;}

然后再调用它

classA{       classB delegate;       -(voID)vIEwdIDload{            [self.delegate DelegateMethod];        }    }

所以从上面我们已经避免了协议和ID变量。

但是我知道很多人使用委托和协议。在这里,我使用委托和协议来了解任何优点

这里是DelegateMethod函数方法的协议实现的用法。

而不是定义。

@protocol的用法是什么?

请任何一个指导我正确的方向…

我是iphone开发的新手。

现在我知道如何创建代表,但是我来研究NSNotification

这也是像代表这样几乎正确的工作。

所以我什么时候应该使用delgate或NSnotification。

谢谢你

解决方法 简短答案:您可以像电话一样考虑代表。你打电话给你的朋友,特意想跟他们说话。你可以说些什么,他们可以回应。你可以说话,直到你挂断电话。代理人以同样的方式创建两个对象之间的链接,您不需要知道代理的类型,只需要实现协议。另一方面,NSNotifications就像一个广播电台。他们向任何愿意倾听的人广播他们的信息。无线电台不能收到来自听众的反馈(除非有电话或委托)。听众可以忽略消息,或者可以使用它来做某事。 NSNotifications允许您向任何对象发送消息,但是您之间不会有链接来进行通信。如果你需要这种沟通,你应该可以实现一个委托。否则,NSNotifications更简单,更容易使用,但可能会让您陷入困境。

长答案:

代表们通常是处理事物的更合适的方式,特别是如果您正在为其他人创建一个框架。当您与代理人使用协议时,您可以获得编译时检查所需的方法,因此,如果您缺少任何必需的方法,您就可以知道何时编译。使用NSNotificationCenter,您没有这样的保证。

NSNotificationCenter是一种“Hack-ish”,是经常使用的新手程序员,可能导致架构差。很多时候这两个功能是可互换的,但更多的“核心”开发人员可能会嘲笑使用NSNotificationCenter。

问:使用“ID”的原因是什么,它们有什么区别?

A:使用ID可以将任何对象作为参数发送给方法。请注意,除非它们包含在各自的对象包装器中,否则不能发送诸如bools,float,double,int等的图元。

classB{-(voID)DelegateMethod;}

然后再调用它

classA{   classB delegate;   -(voID)vIEwdIDload{        [self.delegate DelegateMethod];    }}

您提供的上述示例将要求classA的代理始终是类型classB,这是不利的。而不是在这种情况下使用代理,您可能只需使用引用其他类的变量,例如myClassB。代表的美好之处在于,您可以绕过任何对象,只要代码实现所需的方法(编译器确保,只要它被标记为正确的委托类型),代码就可以工作。

总结

以上是内存溢出为你收集整理的iphone – 代理和通知有什么区别?全部内容,希望文章能够帮你解决iphone – 代理和通知有什么区别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1039388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存