我只想看看一些完成的例子,我应该理解它。
非常感谢
解决方法 通常,目标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中执行回调所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)