我在同一个类中有两个静态方法/选择器,一个作为回调传递给外部方法。但是,我如何编码我得到一个错误。当两个方法都是实例方法时,这都有效,并且我已经读过,当第一个方法是使用[self class]的实例方法时,它可以工作。但是,当两者都是静态的时,我都没有找到信息,而且我还没有找到它。
+(void)Validate {
Callback *managerCallback = [[[Callback alloc] initWithTarget:self Action:@selector(Parse:)] autorelease];
...
}
+(void)Parse:(Callback *)managerCallback {
...
}
谢谢!
答案 0 :(得分:4)
Callback * managerCallback = [[[Callback alloc] initWithTarget:self Action:@selector(Parse :)] autorelease];
该行代码设置为调用实例方法Parse:
,而不是您定义的类方法。
Objective-C没有静态方法。它有类方法和实例方法。
同样,你的方法应该以小写字母开头。
HERP-DA-DERP。戴夫是对的。
鉴于此:
+(void)Validate {
Callback *managerCallback = [[[Callback alloc] initWithTarget:self Action:@selector(Parse:)] autorelease];
...
}
+(void)Parse:(Callback *)managerCallback {
...
}
一些意见:
方法应以小写字母开头
在这样的角色中使用课程是非常奇怪的;即使你真的只需要其中一个,也可以使用实例。至少,实例是一个方便的存储桶,如果你需要两个,它将在未来更容易进行重构。
上述模式假设(并且我ASSumed)保留Callback
的实例。对于回调,定时器和其他一些模式,这是典型的;保留目标,直到最后一次调用目标。然后释放(或自动释放)。但是,通知中心不会这样做。通常也不会保留代表。
答案 1 :(得分:1)
事实证明代码写得正确以执行我想要的操作,但由于回调设置为autorelease,因此在回调处理之前对象已被释放。