gpt4 book ai didi

ios - methodSignatureForSelector 和 instanceMethodSignatureForSelector 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:00:07 24 4
gpt4 key购买 nike

好像instanceMethodSignatureForSelector是类方法,而methodSignatureForSelector是实例方法。然而,他们的描述和用例并没有让我得出这个结论。那有什么区别呢?

最佳答案

由于我们对消息传递和消息转发概念有足够的信息,所以让我们讨论解决方案。在我目前从事的项目中,有一个搜索功能。用户可以使用某些条件搜索结果。该标准由主要标准和高级标准组成,数据模型类适用于这两种标准。主数据模型将包含辅助数据模型作为属性。有一个框架负责将数据库表映射到指定的数据模型。为了保存或检索数据,框架将向映射的数据模型类发送消息。该框架不支持嵌套映射。主数据模型类映射到数据库表,因此框架将期望列映射到属性,并将 setter 和 getter 消息发送到主数据模型类。解决方案是使高级数据模型成为主要数据模型的代理。在主数据模型类中,通过覆盖以下方法,将辅助数据模型设置为主数据模型类的代理。

- (NSMethodSignature*)methodSignatureForSelector:(SEL)selector 
{
NSMethodSignature* signature = [super methodSignatureForSelector:selector];
if (!signature) {
signature = [surrogate instanceMethodSignatureForSelector:selector];
}
return signature;
}

- (void)forwardInvocation:(NSInvocation *)anInvocation
{
if ([surrogate respondsToSelector:[anInvocation selector]])
[anInvocation invokeWithTarget:surrogate];
else
[super forwardInvocation:anInvocation];
}

如果我使用手动添加 setter 和 getter 的初始方法,我最终会编写两倍于属性数量的方法,并且必须确保所有方法签名都模仿高级标准属性。对属性名称的任何更改都是 regressin 的良好切入点,代码维护将变得一团糟。另一种方法是维护一个单一的数据模型,它将代表所有标准,这将产生其他问题,因为 iPhone 和 iPad 的要求不同。消息转发方法减少了所需的手动工作量,并且即使数据模型发生变化也可扩展。

引用:http://blog.imaginea.com/message-forwarding-and-surrogate-objects-in-objective-c/

关于ios - methodSignatureForSelector 和 instanceMethodSignatureForSelector 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154597/

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