如何在Objective-C中执行回调

如何在Objective-C中执行回调,第1张

概述我是Objective-C的初学者程序员。任何人都可以告诉我如何在Objective-C中执行回调函数。 我只想看看一些完成的例子,我应该理解它。 非常感谢 通常,目标C中的回调是由代理完成的。下面是一个自定义委托实现的例子: /// Header File@interface MyClass : NSObject { id delegate;}- (void)setDelegate 我是Objective-C的初学者程序员。任何人都可以告诉我如何在Objective-C中执行回调函数。

我只想看看一些完成的例子,我应该理解它。

非常感谢

解决方法 通常,目标C中的回调是由代理完成的。下面是一个自定义委托实现的例子:

/// header file@interface MyClass : NSObject {    ID delegate;}- (voID)setDelegate:(ID)delegate;- (voID)doSomething;@end@interface NSObject(MyDelegateMethods)- (voID)myClassWillDoSomething:(MyClass *)myClass;- (voID)myClassDIDDoSomething:(MyClass *)myClass;@end/// Message (.m) file@implementation MyClass- (voID)setDelegate:(ID)aDelegate {    delegate = aDelegate; /// Not retained}- (voID)doSomething {    [delegate myClassWillDoSomething:self];    /* DO SOMETHING */    [delegate myClassDIDDoSomething:self];}@end

这说明了一般方法。你在NSObject上创建一个类,声明你的回调方法的名字。 NSObject实际上不实现这些方法。这种类型的类被称为非正式协议,你只是说许多对象可能实现这些方法。它们是一种转发声明选择器的类型签名的方法。

接下来你有一些对象是“MyClass”的委托,MyClass调用代理上的委托方法。如果你的委托回调是可选的,你通常会在调度站点保护他们,例如“if([delegate responsesToSelector:@selector(myClassWillDoSomething :)){”。在我的示例中,需要委托来实现这两种方法。

代替非正式协议,您还可以使用由@protocol定义的正式协议。如果这样做,您可以将代理设置器的类型和实例变量更改为“ID< MyClassDelegate>”而不是只是“ID”。

此外,您会注意到代理不会保留。这通常是因为“拥有”“MyClass”实例的对象通常也是委托。如果MyClass保留其委托,那么将有一个保留周期。在一个类的dealloc方法中有一个好主意,它有一个MyClass实例,并且它的委托来清除该委托引用,因为它是一个弱返回指针。否则,如果某些东西保持MyClass实例存活,你将有一个悬空指针。

总结

以上是内存溢出为你收集整理的如何在Objective-C中执行回调全部内容,希望文章能够帮你解决如何在Objective-C中执行回调所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1049252.html

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

发表评论

登录后才能评论

评论列表(0条)

保存