gpt4 book ai didi

objective-c - 前向调用,手动还是神奇?

转载 作者:行者123 更新时间:2023-12-03 16:44:49 26 4
gpt4 key购买 nike

我有以下两个类(class):

//file FruitTree.h
@interface FruitTree : NSObject
{
Fruit * f;
Leaf * l;
}
@end

//file FruitTree.m
@implementation FruitTree
//here I get the number of seeds from the object f
@end



//file Fruit
@interface Fruit : NSObject
{
int seeds;
}
-(int) countfruitseeds;
@end

我的问题是如何向 f 请求种子数量。我有两个选择。

要么:因为我知道f我可以显式调用它,即我实现该方法

-(int) countfruitseeds
{
return [f countfruitseeds];
}

或者:我可以只使用forwardInitation:

- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
// does the delegate respond to this selector?
if ([f respondsToSelector:selector])
return [f methodSignatureForSelector:selector];
else if ([l respondsToSelector:selector])
return [l methodSignatureForSelector:selector];
else
return [super methodSignatureForSelector: selector];
}
- (void)forwardInvocation:(NSInvocation *)invocation
{
[invocation invokeWithTarget:f];
}

(请注意,这只是一个提出我的问题的玩具示例。我的真实类(class)有很多方法,这就是我问的原因。)

哪种方法更好/更快?

最佳答案

直接方法实现要快得多。但如果您想要一个真正的代理对象,则 forwardInspiration: 路由实际上是唯一的方法。即使您使用宏使方法声明非常短,您仍然需要编写所需的所有方法名称,并在添加或删除任何方法时保持列表最新。

关于objective-c - 前向调用,手动还是神奇?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926174/

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