gpt4 book ai didi

objective-c - NSProxy 类有用的真实例子,为什么?

转载 作者:可可西里 更新时间:2023-11-01 03:08:19 26 4
gpt4 key购买 nike

我一直在想为什么 NSProxy 类如此重要。为什么一个对象需要将它的实例变量保存在其他对象中?我需要示例来了解何时使用它。谢谢!

最佳答案

NSProxy 在需要委托(delegate)拦截时很有用,假设你的应用程序中有一些样式化的 UISearchBar,当用户开始输入时你会在其中删除搜索图标,这意味着你需要监听 UISearchBarDelegate 方法 - searchBar:textDidChange: 但此方法已被执行搜索的 ViewController 监听,为避免代码重复,您不想在每个 ViewController 中复制粘贴隐藏图标逻辑。要解决此问题,您可以创建 NSProxy,它将以 originalDelegate 的形式引用您的 ViewController,以 middleMan 的形式引用您的隐藏搜索图标助手,然后在您的您需要实现以下方法的 NSProxy 实例:

- (void)forwardInvocation:(NSInvocation *)invocation
{
if ([self.middleMan respondsToSelector:invocation.selector])
{
//Note: probably it's better to provide a copy invocation
[invocation invokeWithTarget:self.middleMan];
}

if ([self.originalDelegate respondsToSelector:invocation.selector])
{
[invocation invokeWithTarget:self.originalDelegate];
}
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
id result = [self.originalDelegate methodSignatureForSelector:sel];
if (!result) {
result = [self.middleMan methodSignatureForSelector:sel];
}

return result;
}

并将您的代理实例设置为 searchBar 委托(delegate):searchBar.delegate = proxy

关于objective-c - NSProxy 类有用的真实例子,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14021281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com